回忆以前项目中用过的Abstract Factory设计模式
来源:互联网 发布:谷歌seo推广 编辑:程序博客网 时间:2024/04/29 21:35
用过的设计模式不多,对设计模式的理解也不好,所以用过的设计模式印象特别深刻,从中体会到设计模式带来的甜头。
记得当时一个项目,经过几代人员都没有整合完毕,原因是同一款产品的型号特别多,每种型号的控制码都不同,后来到了我的手上,用了抽象工厂,终于将产品整合完毕。具体怎么用的,不记得了。但是写了个小例子来说明当时的情况:
class AbstractCard { public: virtual void Switch()=0; //各种型号的卡都会执行的动作 virtual ~AbstractCard() {} }; //ConcreteCard1和ConcreteCard2是具体的两种型号的卡,并实现抽象基类AbstractCard的借口Switchclass ConcreteCard1:public AbstractCard { public: void Switch() { cout<<"ConcreteCard1::Switch()"<<endl; } };class ConcreteCard2:public AbstractCard { public: void Switch() { cout<<"ConcreteCard2::Switch()"<<endl; } };//每个具体的工厂类负责创建一个型号的卡的对象class AbstractFactory { public: virtual AbstractCard* CreateCard()=0; virtual ~AbstractFactory() {} };class ConcreteFactory1:public AbstractFactory { public: AbstractCard* CreateCard() { return new ConcreteCard1(); } };class ConcreteFactory2:public AbstractFactory { public: AbstractCard* CreateCard() { return new ConcreteCard2(); } };int _tmain(int argc, _TCHAR* argv[]) { int nType; cout<<"input card type: "; cin>>nType; AbstractFactory* af; if(nType==1) af=new ConcreteFactory1(); else af=new ConcreteFactory2(); auto_ptr<AbstractCard> ac(af->CreateCard()); ac->Switch(); delete af; return 0; }
根据抽象工厂设计模式的结构,写出如上代码。根据不同的卡的型号来创建不同的卡的对象,其余的动作相同。
创建性的设计模式只负责对象的创建,因此用完要注意delete ac;释放掉资源。
总结:
(1)一个系统要独立于它的产品的创建、组合和表示时。
(2)一个系统要有多个产品系列中的一个来配置时。
(3)当你要强调一系列产品对象的设计以便进行联合使用时。
(4)当提供一个产品类库,而只想显示他们的接口而不是实现时。
- 回忆以前项目中用过的Abstract Factory设计模式
- 设计模式(Abstract Factory)
- 设计模式-Abstract Factory
- 设计模式--Abstract Factory
- Abstract Factory设计模式的一些思考
- 设计模式-Abstract Factory模式
- 设计模式 - Abstract Factory模式
- 设计模式--Abstract Factory模式
- Delphi设计模式-Abstract Factory
- 设计模式一:abstract factory
- [.NET 设计模式] Abstract Factory
- 设计模式之: abstract factory
- 设计模式之Abstract Factory
- 设计模式之ABSTRACT FACTORY
- [设计模式]4. Abstract Factory
- 设计模式之abstract factory工厂模式的理解
- 在shell脚本里使用Abstract Factory的设计模式
- 设计模式之Abstract Factory的学习笔记
- Windows防火墙启用,禁用,添加例外端口和应用程序
- 将你做过的小项目,小程序保留下来
- 递归---回文字符
- 一个讨论引发关于js中函数声明,函数表达式,形参与变量声明赋值引发的一些事(http://www.cnblogs.com/zhouyongtao/archive/2012/11/22/2783089)
- 用户模式与内核模式
- 回忆以前项目中用过的Abstract Factory设计模式
- 破解华为c8812e 合约机
- 五分钟学会html5
- Linux内核中用户空间栈和内核栈的区别
- 我对QA工作的一点认识
- 避免闪烁的方法:OnEraseBkgnd
- <meta>头部标签 定义网页属性
- Android开发常见问题及解决方法小结
- sudo: no tty present and no askpass program specified