在面向对象程序设计中,我们经常看到的一促设计模式就是简单工厂模式(Simple Factory Pattern).工厂根据提供给它的数据,返回几个可能类中的一个实例。通常返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂实际上不属于23个GOF模式,但它可以作为其它模式的一个引导。 我们看简单工厂的类图: 图中,X是一个基类,Xa和Xb从X中派生。XFactory根据给出的参数决定返回哪一个子类。返回哪一个类的实例与程序员无关,因为这些类有相同的方法,只是实现不同。返回哪一个类的实例完全取决于工厂。 我们来看一个例子: 我们知道英文名字可以有两种书写方式:"firstname lastname"或"lastname,fristname"假设我们能通过判断lastname与fristname之间有无逗号来确定名字的顺序。这里我们用简单工厂来实现。当然,你用别的方法也许理简单,但我在这里只是讲解一个简单工厂是如何工作的。我们先来定义一个简单的类,它能用构造函数接收表示名字的字符串,并且可以从类中取回名字。
接下来写两个简单的派生类。 FirstFirst类:假设每个名字的最后一个空格前面的所有部分都属于firstname。

LastFirst类:用逗号给lastname分界。当空格或逗号不存在时,两个类里都提供了错误校正。

接下来我们的事就是构造一个简单工厂了。它只检测逗号是否存在,然后返回某个类的一个实例。

最后我们来检测一下:

F5运行。输入 Barack Obama 和 Datongyi,cnwang来检测结果:

这里我们构建一个接口,允许用户用两种方式输入名字,然后将其拆分,显示给用户。我们不需要知道它使用了哪个派生类。工厂为我们提供了这个类。我们只要知道的就是它有两个get的方法。 这就是简单工厂的基本工作原理。创建一个抽象的工厂,它决定使用哪一个类,然后调用这个类实例的方法。而用户不需要知道它到底使用了哪个类。