设计模式 笔记 抽象工厂模式 Abstract Factory

//---------------------------15/04/09----------------------------

//Abstract Factory 抽象工厂----对象创建型模式

/*

1:意图:提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。

2:别名:Kit

3:动机

4:适应性:

1>一个系统要独立于它的产品的创建、组合和表示时。

2>一个系统要由多个产品系列中的一个来配置时。

3>当你要强调一系列相关的产品对象的设计以便进行联合使用时。

4>当你提供一个产品类库,而只想显示它们的接口而不是实现时。

5:结构:

AbstractFactory:<---------------------------------------------Client

CreateProductA()                                                |

CreateProductB()                                                |

|                           AbstractProductA<----------------

|                                   |                       |

-----------------                  -----------                  |

|               |                  |         |                  |

ConcreteFactory1:  ConcreteFactor2:- - ->ProductA2   ProductA1<- - -    |

CreateProductA()   CreateProductA() |                               |   |

CreateProductB()   CreateProductB() |                               |   |

|                               |    AbstractProductB<---------------

|                               |           |                   |

|                               |       ---------               |

|                               |       |       |               |

|                               |- ->ProductB2  ProductB1<- - - |

|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|

6:参与者:

1>AbstractFactory:声明一个创建抽象产品对象的操作接口。

2>ConcreteFactory:实现创建具体产品对象的操作。

3>AbstractProduct:为一类产品对象声明一个接口。

4>ConcreteProduct:

1)定义一个将被响应的具体工厂创建的产品对象。

2)实现AbstractProduct接口。

5>Client:仅仅使用由AbstractFactory和AbstractProduct类声明的接口。

7:协作:

1>通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有

特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。

2>AbstractFactory将产品对象的创建延迟到他的ConcreteFactory子类。

8:效果:

1>优点:

1)它分离了具体的类:

AbstractFactory模式帮助控制一个应用创建的对象的类。

因为每一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过

抽象接口就可以操作实例对象,产品的类名耶在具体工厂的实现中被分离。

2)它使得易于交换产品系列:

当客户想要换一套产品系列使用时,只需要改变具体工厂即可

就是在初始化的时候改变使用的工厂,剩下的都无需改变,因为客户使用的是抽象工厂接口。

3)有利于产品的一致性:

当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一系列的对象。

AbstractFactory很容易就能实现。

2>缺点:

难以支持新种类的产品:

想要在一个产品系列中增加一种产品会很难,这样需要改变AbstractFactory的接口

其他子类也需要有所改变。

9:实现:

1>讲工厂作为单件:

一个应用中一般每个系列的产品只需要一个ConcreteFactory的实例。因此

工厂通常最好实现为一个Singleton。

2>创建产品:

AbstractFactory仅声明一个创建产品的接口,真正创建产品是由ConcreteProduct实现的

最常用的是每个产品定义一个工厂方法。一个工厂会为每个产品重定义该工厂指定的产品。

第二种方法是使用Prototype模式来实现,当系列有很多时,可以使用这种方法。

3>定义可扩展的工厂:

一种不安全的办法就是:创建产品的时候传入一个参数(标识),选择要创建的产品种类,然后返回一个

通用类型的指针(这样做不安全,而且需要所有产品种类有公共的基类,还要有同样的接口)。

10:代码实现:                                                                        */

class MazeFactory

{

public:

MazeFactory();

virtual Maze* MakeMaze()
const

{return
new Maze;}

virtual Room* MakeRoom(int n)const

{return
new Room(n);}

virtual Wall* MakeWall()
const

{return
new Wall;}

virtual Door* MakeDoor(Room* r1, Room* r2)
const

{return
new Door(r1,r2);}

};

Maze* MazeGame::CreateMaze (MazeFactory& factory)

{

Maze* aMaze = factory.MakeMaze();

Room* r1 = factory.MakeRoom(1);

Room* r2 = factory.MakeRoom(2);

...

return aMaze;

}

//看看Bombed工厂

Wall* BombedMazeFactory::MakeWall()const

{

return
new BombedWall;

}

Room* BombedMazeFactory::MakeRoom(int n)const

{

return
new RoomWithABomb(n);

}

//只要在创建时换一个工厂就可以创建出不同的产品。

时间: 2024-10-27 08:24:24

设计模式 笔记 抽象工厂模式 Abstract Factory的相关文章

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Abstract

设计模式-04抽象工厂模式(Abstract Factory Pattern)

1.模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/

Android设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

php设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

抽象工厂模式(Abstract Factory)C#实例

抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 本实例描述了抽象工厂模式的一个使用场景.在动物世界弱肉强食,食肉动物会吃掉食草动物.这是动物世界的规律,因此在动物世界类中有Runfoodchain(运行食物链)方法.在动物世界里总是有食肉动物和食草动物这两个抽象成员.它们之所以是抽象成员是因为他们不是具体的一种动物.而食草动物与食肉动物的区别在

抽象工厂模式&lt;Abstract Factory&gt;

概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.让子类决定实例化哪一个类 角色 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象. 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例. 抽象产品(Product):定义工厂方法所创建的对象 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类. 解读 UML图 c#代码