【起源】
某类型有多个变化维度(比如:有才的男人。才华和性别是两个维度),目标是:不引入额外的复杂度,轻松的适应两个方向的变化。
【动机】
将抽象部分 与实现部分 分离,使他们可以独立的变化。
【核心】
对抽象类和子类的理解:
1.通常的理解方式:子类是抽象类的具体情况,即:子类是强修饰 的抽象类(如:人和男人)。用作“主语”。相当于“抽象部分 ”(是什么)。
2.抽象类是枚举变量,子类是枚举值。用作“定语”来弱修饰 “主语”。相当于“实现部分 ”(怎么做)。
多个变化维度构成一个坐标系,每个维度用对应的抽象类来描述,对应的子类是数轴上的值。
很自然的思考方式,将弱修饰作为属性,放到主语中。这个属性像一座“桥”,将两个抽象类联系到了一起。
本质:使用了对象组合,并把组合对象的变化用父类封装起来。具体方式:父类作为属性,子类用作参数在构造函数中初始化。
【代码实例】
【模型图】