- 首先,Mixin类必须表示某一种功能,而不是某一个物体,这点跟java中的Runnable和Callable是一样的。
- 其次,它表示的责任必须单一,如果有多个功能,我们应该去实现多个Mixin类。
- 接下来,Mixin类不依赖于子类的实现,且属于抽象类,本身不能实例化,也不能继承Mixin以外的类。
- 最后,子类即使没有继承Mixin类,也必须照常工作,只是部分功能缺少无法使用。
Python样例:
class Vehicle: pass class PlaneMixin: def fly(self): print("Flying") class Airplane(Vehicle, PlaneMixin): passAirplane 类实现了多继承,在继承链上,它继承了Vehicle类和PlaneMixin类,这里我们遵循Mixin设计模式的要求,在后面添加上后缀Mixin增强代码的可读性。 上述代码可以这么理解,Airplane只是一个Vehicle类,而不是Plane类,而Mixin后缀,它告诉其他读者,这个类是作为功能添加到子类中的,并不是作为父类,它的作用等同于Java中的interface。 这样一来,我们不需要复杂而庞大的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类。