为什么是has-a

设计模式的书中大多会提到,如果可以的话,最好使用has-a而不是is-a关系。一直以为这是个效率问题,直到现在才理解并非如此。

如果是is-a关系,用户类就必须直接继承基类,而继承关系是无法动态绑定的。但若是has-a,这个被聚合的子对象就可以从某个工厂方法得到。当环境发生变化时,只需要修改工厂方法即可。

当然,is-a关系要比has-a方便一些,因此,可以向用户类提供可以直接的基类,但基类与实现间再用一层has-a关系隔离。

原来如此,实践果然是掌握真理的唯一途径。

学而不思则罔,思而不学则殆。

on March 8th, 2009 | No Comments »