知识卡片
组合优于继承的伸缩性优势
内容
当”给某个类加一种变体行为”这个需求出现多种独立的组合方式时(比如”集合”既可以按不同过滤条件限制成员、又可以叠加不同的父类),用继承实现意味着每种组合都要单独定义一个子类,组合数量随维度相乘爆炸增长。更好的做法是让新类内部持有一个被包装的原对象实例,自己只负责在调用前后插入额外逻辑(如过滤校验),其余核心行为原样委托给内部持有的对象去执行——这就是”组合优于继承”这条设计原则的具体体现。这个取舍的判断标准是:如果变化点是多个可以自由排列组合的独立维度,继承会迫使你为每种组合创建一个僵化的类,而组合把每个维度做成一个独立的、可插拔的部件,按需拼装。
参考来源
《JavaScript权威指南(原书第6版)》第9章《类和模块》