在python中允许多重继承,所以在python编程中Mixin模式相当于多继承的特殊情况,是常见的设计但在单一继承的语言(比如java)不能使用Mixin设计。在继承中,可以看成是“i am”, 而Mixin设计就可以看成“i can”
Mixin的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个Mixin的功能,而不是设计多层次的复杂的继承关系。
下面是简单的代码案例:
# coding: utf8
# 根据一些简单类例子解释Mixin设计模式
__author__ = '波仔'
"""
类继承树状图
Animal
Mammal Bird
Dog Bat Parrot Ostrich
"""
"""
在python中允许多重继承,所以在python编程中Mixin模式相当于多继承的特殊情况,是常见的设计
但在单一继承的语言(比如java)不能使用Mixin设计。
在继承中,可以看成是“i am”, 而Mixin设计就可以看成“i can”
"""
"""
Mixin的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合
多个Mixin的功能,而不是设计多层次的复杂的继承关系。
"""
# 动物类
class Animal(object):
pass
# 两大子类:
class Mammal(Animal):
pass
class Bird(Animal):
pass
# Mixin
class RunnableMixin(object):
def run(self):
print("running...")
class FlyableMixin(object):
def fly(self):
print("flying...")
class CarnivorousMixin(object):
def carn(self):
print("eating meet...")
class HerbivoresMixin(object):
def herb(self):
print("eating herbivores...")
# 各种动物小类:
class Dog(Mammal, RunnableMixin, CarnivorousMixin):
pass
class Bat(Mammal, FlyableMixin):
pass
class Parrot(Bird, FlyableMixin, HerbivoresMixin):
pass
class Ostrich(Bird, HerbivoresMixin):
pass