为了加强对这五种创建模式的理解,我就拿电脑生产做为例子。 一个电脑包含很多组件:CPU, Disk, Monitor, keyBoard, Mouse。
当然,首先我们有5种Factory: CPUFactory, DiskFactory, MonitorFactory, KeyBoardFactory, MouseFactory。这里采用的就是Factory模式,例如CPUFactory可以有Intel, AMD等等,DiskFactory可以有Maxto, Seaga等。这几个都是电脑组件的程产厂商,对于一个电脑的组成厂商,它需要声称这几个Factory的实例,以便于每次需要一个组建的时候就可以直接生成。于是一个全球的管理全部电脑组建的Abstract Factory就出现了。 人如其名,这个抽象工厂真的是抽象的,并没有这个组织。
class CPUFactory
{
public:
virtual CPU* CreateCPU();
}
class IntelCPUFactory : public CPUFactory
{
public:
virtual CPU* CreateCPU();
}
class AMDCPUFactory: public CPUFactory
{
public:
virtual CPU* CreateCPU();
}
class MousePrototype
{
public:
virtual Mouse* CreateMouse();
}
class SingletonAbstractComputerFactory
{
virtual CPUFactory* CreateCPUFactory();
virtual DiskFactory* CreateDiskFactory();
...
virtual MousePrototype* CreateMouse();
}
显然,这个Abstract Factory只需要一个,因此它是singleton的。这样不管在世界的任何地方,我们制造一个 IntelCPUFactory,我都可以制造出来。
上面的Abstract里面CPU和Disk都是声称了一个Factory,例如可以生成IntelCPUFactory,生成MaxtoDiskFactory。而由于很多Mouse都是从一个原型里面做了一些修改,所以可以声明原型法。
有了上面的定义后,我们就可以在程序的任何地方,来得到一个CPU或者一个Disk,例如:我们在SingletonAbstractComputerFactory中只生产IntelCPU(这个可以写死在代码里面,也可以配置),如果需要生产其他新种类的CPU,只需要修改这个singleton类就可以了。
现在组建都有了,我们需要一台电脑,怎么办呢?我们可以让联想公司做这件事情,这就是builder
class Builder
{
public:
virtual void SetCPU(CPU* cpu);
virtual void SetDisk(Disk* disk);
virtual void LinkToComputer();
}
class LegendBuilder : public builder
{
public:
virtual void SetCPU(CPU* cpu);
virtual void SetDisk(Disk* disk);
virtualComputer* MakeComputer();
}
这里可以看出:builder和Abstract Factory的区别,可能他们的声明都是一样的,但是做的事情不一样。Abstract Factory侧重的是创建几个东西,而builder侧重的是把已经有的几个东西组成一个新的复杂的object。所以,intel是Factory,而联想是builder。
分享到:
相关推荐
3.2原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求...
文档讲设计模式3大类,创建型模式,结构型模式,行为模式,然后对每一种模式进行详细讲解,以及举例当前模式适合的场景,最重要的是还有各种模式的简单代码实现。我个人最开始接触设计模式也是从改书开始的,以前不...
简单易懂的java 设计模式文档,对23种设计模式举例讲解:总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器...
创建型模式 1、简单工厂模式lua实现 2、工厂方法模式lua实现 3、原型模式lua实现 4、建造者模式lua实现 5、单例模式lua实现 6、抽象工厂模式lua实现 结构型模式 1、装饰模式lua实现 2、代理模式lua实现 3、外观模式...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 建筑和软件中模式之异同 A. 创建模式 设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例...
设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问. 为什么要使用Proxy? 1.授权机制 不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:...
享元模式的分析以及实际应用 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 3. 享元模式介绍 5 3.1举例分析 5 3.2基本介绍 5 ...6. 享元设计模式学习总结: 13
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 优点:易于交换“产品系列”,只要更改相应的工厂即可。 缺点:建立产品的时候很繁琐,需要增加和修改很多东西。 优化1:为了...
设计模式+单例+应用场景+理解 - 本资源是一个设计模式的理解,解释了单例模式的定义和优点,以及如何用Java创建和使用单例类,举例了单例模式的应用场景。
工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。 其类图如下...
交互式用户界面模型的特点,提出了一种基于java/swing和两种设计模式的交互 式界面的设计思想与具体实现方案。该方案包含用户界面代理,能提供给用户图 形的可视化方式来设计界面的视图,和控制器的设计;这套方案...
本文实例讲述了PHP设计模式(一)工厂模式Factory。分享给大家供大家参考,具体如下: 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new...
在上面的一段代码中一共用了三种模式,除了工厂模式外,还有Singleton单态模式,以及proxy模式,proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不...
工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式。 android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类...
在许多面向对象的应用程序中,有些对象的创建代价过于大或者过于复杂。要是可以重建相同的对象并作轻微的改动,事情会容易许多。我们可以通过轻微的改动重用已有的对象,以适应程序中的特定情况。今天我们就来学习...
22.5 使用设计模式的好处 260 22.6 小结 260 22.7 常见问题解答 261 22.8 小测验和习题 261 22.8.1 小测验 261 22.8.2 习题 261 第三部分 高级应用 第23章 嵌入式系统建模 265 23.1 回到餐馆 265 23.2 发明之母 ...
工厂模式是一种有助于消除类之间依赖性的设计模式,它使用一个方法来决定要实例化哪一个类。本文详细介绍了简单工厂模式的理论,并且举例说明了简单工厂模式的具体应用。 基本介绍 简单工厂模式
一个repos,它举例说明了设计模式并对其进行了测试。 四个设计模式的帮派 创作设计模式 抽象工厂。 允许创建对象而无需指定其具体类型。 建造者。 用于创建复杂的对象。 工厂方法。 创建对象时未指定要创建的确切...