Mixins is an actively used design pattern created in 1980. A mixin is a class that contains methods for use by other classes without having to be the parent class of those other classes. How those other classes gain access to the mixin's methods depends on the language. Mixins are sometimes described as being "included" rather than "inherited". A mixin can also be viewed as an interface with implemented methods.

39Years Old

Languages with Mixins include julia, python, racket, ruby, typescript, xtext

Example from julia:

# Including the same code in different modules provides mixin-like behavior.
module Normal
include("mycode.jl")
end

module Testing
include("safe_operators.jl")
include("mycode.jl")
end

Example from python:

# https://easyaspython.com/mixins-for-fun-and-profit-cb9962760556
class EssentialFunctioner(LoggerMixin, object):

Example from racket:

(mixin (interface-expr ...) (interface-expr ...)
 class-clause ...)

Example from ruby:

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end
class Sample
include A
include B
   def s1
   end
end
samp = Sample.new
samp.a1
samp.a2
samp.b1

Example from typescript:

// https://www.typescriptlang.org/docs/handbook/mixins.html
class SmartObject implements Disposable, Activatable {
}
// Note: still need to do some runtime ops to make that work.

Example from xtext:

grammar org.example.domainmodel.Domainmodel
       with org.eclipse.xtext.common.Terminals

Last updated February 18th, 2020

Edit Mixins on GitHub