时候是“组和”,用英语术语表达就是“composition”。 而图4 Factory Method是子类对抽象父类继承,进而实现父类的抽象方法, 具体使用的时候是”继承”, 用英语术语表达就是”inheritance”。 也就是很多OO书里说谈到的“is a? or has a?”的问题, composition指的就是has a, 而inheritance指的就是is a。
请注意到目前为止,我们没有用到继承,这也是符合面向对象编程的原理的—组合优先于继承(composition, not inheritance)。但是当系统再进一步发展长大后,她已经不能再称为模块,而是成长为框架(framework)时,我们就要考虑适当的使用Factory Method模式了。基本的功能将在父类中加以实现,而具体的对象生成交由子类来完成。如果结合其他模式来理解的话,就是子类中生成对象的工作将转交给其他3中模式类们来完成。如果希望在运行状态(runtime)时动态切换相关的Builder或Factory的话,可以采用Strategy模式。不过,就像很多介绍面向对象编程的书籍建议的那样,不到万不得已不要使用继承,也就是说,切忌在系统还非常简单的情况下就贸然使用Factory Method。