2013年10月7日 星期一

[Design Pattern] Composition vs. Inheritance

  • 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

沒有留言:

張貼留言