设计模式之简单工厂模式

March 22, 2016

设计模式与设计原则

简单工厂模式

简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

工厂模式根据抽象的程度分三种:简单工厂模式,工厂方法模式和抽象工厂模式。其中简单工厂模式并不属于 23 中设计模式之一。这三种模式只是抽象的程度不一样,但是大致解决的问题是类似的。

工厂模式解决的问题:

在世界里,设计实现了 N 多种产品类,但是又不希望使用者(调用者)自己去实例化这些产品类,那么就需要工厂来实例化。世界上有很多种食物,也有很多种人,每个人喜欢吃的东西不一样,如果把实例化食物这个事情交给人去实现,那么如果新增加一中食物,那么对应的,就需要修改人的代码,或者如果新增加一个人的分类,就需要为这个人编写实例化食物的代码。这样人和事物的代码耦合度很高,重复的代码也可能很多。那么这个时候,如果有一个工厂,专门用来负责实例化食物,人只要负责消费食物就可以了。这样就把实例化食物的代码从人挪到了工厂了。

工厂模式的优点

  • 代码结构清晰,有效封装。在工厂里对产品类的实例化进行封装,调用者不需要关心产品类的实例化。
  • 对调用者屏蔽具体的产品类。调用者关心的是产品类提供的接口,而不关心接口的具体实现。
  • 降低耦合度。把产品和调用者分开,降低了耦合度。

简单工厂方法

简单工厂一般也称为静态工厂方法,因为简单工厂一般只提供诺干个静态的方法,比如方法1返回类型是食物,在方法体里实例化一个汉堡并且返回,那么调用方法1的人就获得一个汉堡(汉堡是食物的子类),方法2 返回类型也是食物,但是方法体里实例化一个盖饭,那么调用方法2 就获得一份盖饭。也可以写个方法3 ,返回类型是食物,调用的时候需要传递参数,传汉堡我就实例化汉堡,传盖饭我就实例化盖饭。两种方式各有优缺点,按需取舍。

简单工厂的优缺点

优点:简单,而且一定程度上解耦,把消费者和产品分开。
缺点:不够灵活。每增加一个产品类,就需要修改对应的工厂类。就像新增了一个菜,餐厅就需要更换菜单一样。而且当产品足够多的时候,工厂的负担会变得很大,就像餐厅提供的菜太多了,以至于服务员都记不过来一样,你点一道菜,服务员都需要想半天才反应过来,那就拖垮了整个餐厅系统的运行了。

23种设计模式:
http://blog.binkery.com/pattern_and_principle/design_pattern/summary.html

参考

--- EOF ---

添加新评论