组合替代继承
发布网友
发布时间:2023-03-23 18:22
我来回答
共1个回答
热心网友
时间:2023-10-15 12:33
HeadFirst设计模式第一章阐述的观点是多用组合,少用继承.
我的理解是适当使用继承的特性,不过度设计.
书上用到的例子
描述鸭子这个对象 假设鸭子都有飞行这个属性
鸭子的实际对象野鸭会飞
鸭子的实际对象玩具鸭不会飞
这样迭代下来会产生一个问题 需要关注的属性太多
每一个派生的鸭子 都需要重写fly方法来确定飞行这个属性
如果鸭子有飞行, 游泳,跑步...属性越多 继承的负担就越重
把鸭子的飞行抽象成一种行为
这样会不会飞可以分别描述
会飞的行为
不会飞的行为
再次描述鸭子的派生鸭子 都只需要动态指定鸭子的组成行为
组合替代继承之后,鸭子的逻辑更加清晰.
维护者只需要分别维护鸭子和鸭子行为的逻辑
组合是has-a关系,继承是is-a关系
未完待续......