- Inheritance:
Take advantage of dynamic binding and polymorphism. - Dynamic binding: 在runtime時, 根據class 決定使用的tethod implemetation. Polymorphism: 使用 supercalss 保存自身或subclass的references.
- Codes易於變換所使用的types. 但superclass的interface不易變換(fragile).
- Superclass 是 "fragile"(or weak encapsulation). 因為對superclass的修改, 會ripple out至使用到它(or 其subclass)的codes.
- Composition:
Front-end class(原subclass角色)保存back-end class(原supperclass角色)的reference, 不繼承superclass的method, 改採用invoke的方式. - 好處是, 對back-end class的修改, 至少影響可止於front-end class(若是inheritance, 會ripple out).
- Inheritance提供polymorphism, composition易於變更back-end class的interface, 如果想同時採用2者的好處, 可同時使用composition與interface.
Reference:
http://www.artima.com/designtechniques/compoinhP.html
沒有留言:
張貼留言