如果要遵循模式的原则和实践,就暗含着必须将对象的使用与对象的构造和管理分开来,各种工厂模式应运而生。
软件开发的大背景:
规则:先考虑系统中需要什么,然后再去关注如何创建系统......也就是说,我们应该在确定了对象是什么之后再定义工厂。首先,确定对象是什么,它们如何工作,然后确定如何对其实例化。
对象应该要么构造、或管理其他对象,要么使用其他对象,而不应该兼而有之。
“使用对象”与它们使用的对象是解耦的。它们无需知道有什么协作对象,甚至不需要知道可能会有什么对象,这些工作是工厂负责的。同时,工厂只知道它们在创建或者管理哪些对象,而无需知道这些对象如何使用。
而且,这种方式还为封装创造了更多机会。实现类对“使用对象”完全隐藏了。添加新的实现或者删除一些已有的实现,都不会改变“使用对象”。
工厂应该既关心使用哪些对象的规则,又需关心如何管理它们的规则,可能包括实例化多少对象,如何共享对象。这使我们能够在工厂中封装所有对象的所有规则。