一、定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延伸到其子类。
简单的说,就是定义一个工厂,由工厂的生产方法来生产具体的产品类,用户只需要调用工厂的生产方法来获取具体的产品,而不需要关心生产的过程。
二、优点
1.拥有良好的封装性。调用者需要一个具体产品,只需要向工厂获取,而不用知道创建对象的艰辛过程,降低模块间的耦合。
2.易于扩展。增加产品时,只需要适当修改具体的工厂类或者扩展一个工厂,甚至不用修改。
3.屏蔽产品类,解除耦合。产品类的实现如何变化,调用者都不需要关心,只需要关心产品的接口即可。
三、女娲造人实例分析
大家都听过女娲捏土造人的神话故事,这软件开发中,这个过程设计到三个对象:女娲、八卦炉、不同肤色的人。女娲可以使用场景类 Client 表示,八卦炉类似于一个工厂 Factory,负责制造具体的产品 Product(即人类 Human)。相应的类图如下:
当我们仅需要使用到一个工厂,我们没必要把它产生出来,同时使用静态方法就可以了。
例如上面女娲那个例子,我们可以去掉 AbstractHumanFactory 类,同时把 createHuman 方法设置为静态类型,简化了类的创建过程。类图如下:

类图变简单了,少了 AbstractHumanFactory 类,调用也比较简单,该模式是工厂方法模式的弱化,因为简单,所以称之为简单工厂模式,也叫静态工厂模式。
新的 HumanFactory 的代码可以如下定义:
其优点是简单,缺点是工厂类的扩展比较困难,不符合开闭原则。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!