今天要说的模式是工厂模式。该模式在设计模式中也有 。按照《设计模式》一书的说法,该模式的意图是:
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
通常情况下,我们在模块间编程,模块间的调用都是接口调用。在面向对象编程中,接口只负责功能上的调用,不能创建对应的子类对象。所以工厂模式就用于创建子类对象,并返回接口形态的对象实例。
在系统设计中,我们经常见到工厂模式。典型的就是Windows中的COM机制。QueryInterface函数就是COM工厂模式中典型的创建函数。在这种应用中,整个模块类似于一个功能库,根据用户的请求,创建相应的对象,并返回接口供用户使用。该功能库可以独立维护和发布。将接口与实现分离。修改实现,不需要修改客户应用。
在系统设计中,工厂模式的另外一种用法就有些特殊。和其本意有所不同。在apache中,主进程监视网络连接,当浏览器客户端发送联建请求到服务器时,apache服务器会创建一个连接子进程专门处理与该浏览器客户端的连接。这也可以算是种工厂模式。而该模式的意图主要是将问题分治为几个独立的问题解决,使问题的规模缩小,相互独立。在apache中,主进程负责监视网络上的连接请求,子进程负责连接的业务服务。子进程有其独立的进程空间,这使得浏览器客户端似乎是在和一个专有服务端进行业务交互,使得服务端的开发变得简单。
工厂模式细细品位还有很多中使用方式,本人阅历有限,只能先提及以上两种。如果后续有新的发现,还会补充。