回忆以前项目中用过的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)当提供一个产品类库,而只想显示他们的接口而不是实现时。