抽象工厂和生成器
2010-10-21 11:09
267 查看
用一个例子在表述抽象工厂和生成器的差异,备忘!
抽象工厂应用来生产一系列的对象,相当于配套产品
生成器用来组装各种部件使之成为一个整体
抽象工厂应用来生产一系列的对象,相当于配套产品
生成器用来组装各种部件使之成为一个整体
/* 抽象工厂(abstract factory)和生成器(builder) 抽象工厂用来生成对象 生成器用来生成和组装对象 使用这两种模式来模拟生产一台只有CPU的计算机 */ //首先定义 Computer、 CPU类. class CPU { }; class Computer { public: void Assembl(CPU* _cpu); private: CPU* _cpu; }; //定义一个CPU工厂(abstract factory),这个工厂生产整机,也生成配件件。 class CPUFactory { public: virtual CPU* CreateCPU() = 0;//CPU工厂一定要生成CPU要不然关门算了 }; //定义一个品牌机厂商(builder), 这个厂商自己会生成电脑配件,但他们更多的时候是从工厂处拿配件组装电脑,测试兼容性,然后出厂。 class ComputerBuilder { public: virtual void BulidComputer(){}; virtual Computer* GetComputer(){}; }; //定义AMD class AMDCPU : public CPU{}; class AMD : public CPUFactory { public: AMDCPU* CreateCPU() { return new AMDCPU(); } }; //定义Inter class IntelCPU : public CPU{}; class Intel : public CPUFactory { public: IntelCPU* CreateCPU() { return new IntelCPU(); } }; //定义DELL class DELLComputer : public Computer{}; class DELL : public ComputerBuilder { public: //生产一台只有CPU的电脑,这个factory可以是AMD也可以是Intel void BulidComputer() { _computer = new DELLComputer(); CPU* cpu = _factory->CreateCPU(); //装配电脑 _computer->Assembl(cpu); }; //出货(这个破电脑只有一个CPU...) Computer* GetComputer() { return _computer; } //设置CPU生产商 void SetFactory(CPUFactory* factory) { _factory = factory; } private: DELLComputer* _computer; CPUFactory* _factory; }; //定义客户类,从品牌机厂商订购电脑。 class Client { public: void GetComputer(ComputerBuilder* builder) { builder->BulidComputer(); _computer = builder->GetComputer(); } private: Computer* _computer; }; //最后开始使用了 int main() { //世界上有了DELL DELL* dell = new DELL(); //世界上有了Intel Intel* intel = new Intel(); //我是一个客户 Client me; //我想要一台有i7 930 CPU的DELL,于是打电话给DELL,叫DELL给我造一个。。。 //DELL为了我先去找到Intel dell->SetFactory(intel); //然后DELL给我电脑了 me.GetComputer(dell); } /* 最后 这个两个模式一起用 想要什么牌子的电脑 想换什么牌子的CPU变得好快 太爽了 */
相关文章推荐
- 设计模式4.3-工厂模式之抽象工厂
- 设计技巧14:抽象工厂 Abstract Factory 组合方式 创建零件,用先关零件组合生成一个产品
- 设计模式--抽象工厂
- PHP中的设计模式-创建型-抽象工厂
- 抽象工厂 2
- 抽象工厂
- 抽象工厂
- 工厂方法PK抽象工厂
- 设计模式-创建型03-抽象工厂
- 抽象工厂 -- 实例化产品族
- 《JAVA与模式》学习笔记(二)工厂模式,抽象工厂
- 工厂方法之抽象工厂
- JAVA设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- 设计模式-抽象工厂
- 设计模式理解(一)创建型——工厂、抽象工厂
- 跟着实例学习设计模式(5)-工厂方法 、抽象工厂的差别
- 简单工厂、工厂方法和抽象工厂的区别
- 简单工厂,工厂方法和抽象工厂的区别总结
- 简单工厂、工厂方法、抽象工厂之小结与区别
- 机房收费系统总结之登录功能实例解析抽象工厂+配置文件