浅析设计模式系列之二——简单工厂模式

基本简介

  从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 

     简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

 

意图:
提供一个类,由它负责根据一定的条件创建某一具体类的实例。

 

该模式中包含的角色及其职责

 1)     工厂(Creator)角色

  简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

 2)    抽象产品(Product)角色

  简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

 3)      具体产品(Concrete Product)角色

简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 一般来讲它是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。

 

UML图:

 

例子:

实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。

 

分析:根据运算符号的不同,进行的运算是不一样的,但他们都其实属于同一个抽象(抽象产品),他们都可以从一个接口中派生出来,你需要哪一个,就向工厂描述一下这种运算的特征,工厂就会为你生成一个具体的产品类,你就可以使用了。

 

抽象产品类代码:

 

具体产品类代码:

 

 

 

 

 

工厂类代码:

客户端调用代码:

到这里,代码就完成了。


优点:

  • 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,客户端可以避免直接new一个对象产品。
  • 可扩展性强,当需要增加新的运算功能时,只需再继承IOperate产生具体的产品类,然后在工厂中加入即可。
  • 外界与具体类隔离开来,偶合性低。增加新的功能时,不需要去修改原有功能。
  • 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:           

  • 工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则。
  • 当增加一个新的功能时,即增加一个具体的产品类之后,需要更改工厂类的实现,这违反了开放-闭合原则(下一章工厂方法模式将介绍如何解决这个问题)。

应用情景

  • 工厂类负责创建的对象比较少 
  • 客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心 

参考资料

   《大话设计模式》 程杰 清华大学出版社

 

posted on 2012-08-10 21:20  好坏  阅读(295)  评论(0编辑  收藏  举报

导航