码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式:简单工厂、工厂方法、抽象工厂

时间:2017-03-20 18:46:18      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:ges   tail   大话设计模式   类图   需求   log   简单工厂模式   str   uml   

一、简介

工厂模式主要是为创建对象提供接口,让子类决定实例化哪个类。按照《Java与模式》可以分为:

1.简单工厂模式

2.工厂方法模式

3.抽象工厂模式

二、简单工厂

适用于业务简单的情况:小项目或具体产品扩展很少的情况。

它由以下三种角色组成:

具体工厂类

抽象产品类

具体产品来

UML类图关系如下:

技术分享

 

三、工厂方法

概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法将一个类的实例化延迟到其子类。

有以下角色组成:

抽象工厂类

具体工厂类

抽象产品类

具体产品类

UML类图关系如下:

技术分享

工厂方法和简单工厂的比较:

简单工厂方法适用于那些扩展需求较少的场景,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,但是每当需要添加新的功能的时候就需要去修改工厂类,这其实是违反了“开发-封闭原则”的。

而工厂方法则是将简单工厂的内部逻辑判断转移到客户端中进行,需要客户端决定选择哪一种工厂类来实例化对象。在添加新功能的时候只要继承抽象工厂类就可以了。

四、抽象工厂

概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

有以下角色组成:

抽象工厂类

具体工厂类

抽象产品类

具体产品类

与工厂方法的区别在于:

在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 
                              一个抽象工厂类,可以派生出多个具体工厂类。 
                              每个具体工厂类只能创建一个具体产品类的实例。 
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
                              一个抽象工厂类,可以派生出多个具体工厂类。 
                              每个具体工厂类可以创建多个具体产品类的实例。 
  
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

UML类图关系如下:

技术分享

 

参考自:

《大话设计模式》

http://blog.csdn.net/wangwenhui11/article/details/3955125

http://blog.csdn.net/zhengzhb/article/details/7359385/

工厂模式:简单工厂、工厂方法、抽象工厂

标签:ges   tail   大话设计模式   类图   需求   log   简单工厂模式   str   uml   

原文地址:http://www.cnblogs.com/libertycode/p/6590684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!