设计模式:5种创建模式举例
来源:互联网 发布:网络骗术2017实用 编辑:程序博客网 时间:2024/06/06 04:25
为了加强对这五种创建模式的理解,我就拿电脑生产做为例子。 一个电脑包含很多组件: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);
virtual Computer* MakeComputer();
}这里可以看出:builder和Abstract Factory的区别,可能他们的声明都是一样的,但是做的事情不一样。Abstract Factory侧重的是创建几个东西,而builder侧重的是把已经有的几个东西组成一个新的复杂的object。所以,intel是Factory,而联想是builder。
- 设计模式:5种创建模式举例
- 设计模式 举例理解
- 装饰设计模式举例
- Android设计模式举例
- 观察者设计模式举例
- 设计模式,7种构造型模式举例
- 设计模式应用场景举例
- 建造者设计模式举例
- 设计模式应用举例(1)
- 设计模式应用举例(2)
- 设计模式-创建模式
- 设计模式-创建模式
- 设计模式-创建模式
- Java设计模式:工厂模式举例
- java设计模式之代理模式举例
- 设计模式-5种创建型
- 设计模式之创建型模式(5种)
- 常见的设计模式-创建型模式(5种)
- 设计模式:工厂和原型(清晰明了的对比)
- 浅谈 fileUplaod!
- spring,webwork单元测试
- 利用纯C++实现COM
- Photoshop鲜为人知的的75个技巧
- 设计模式:5种创建模式举例
- HTML 特殊字符表
- 获取datalist中的一组lable的文本
- 抽象工厂模式(Abstract Factory Pattern)
- webwork在Action中取页面东西时,如果第一次非空而第二次为空如何取到空
- 模糊查询
- 利用终端服务进行远程访问控制
- SQL2000卸载了后重新安装时不能安装的解决办法
- ANT