先将上面2个图拿出来做比较:
简单工厂:
工厂方法:
1、简单工厂模式下,工厂类与具体父类及具体子类都有关联;而工厂模式下,工厂类只与具体父类有关联,由工厂子类负责与具体子类进行关联。
2、如果在简单工厂模式下加入新功能扩展,就要对工厂类做修改,加入新功能;而在工厂模式下,只是单纯地加入工厂子类和具体子类,而不需要对工厂类做修改,做到了“开放扩展,封闭修改”。
3、其实尽管对工厂类不需要做修改了,但是也要对客户端做修改,因为添加了对新功能的调用。也就是说工厂模式做到了对工厂类的开闭原则,却解决不了对客户端的修改。
4、一些情况下,可以考虑用工厂模式+反射来解决客户端修改问题。