设计模式学习--抽象工厂模式
2017-04-17 00:00
330 查看
抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的优点与缺点
优点:易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这样使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
缺点:增加一个具体的产品类的时候需要更改原有的类,破坏了开放-封闭原则。
显示结果:
抽象工厂模式的优点与缺点
优点:易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这样使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
缺点:增加一个具体的产品类的时候需要更改原有的类,破坏了开放-封闭原则。
#include <iostream> using namespace std; class List_7 //手机7系列 { public: virtual void product(){}; //生产虚函数 virtual void sell(){}; //销售虚函数 }; class VIVO_7 : public List_7 //vivo7手机类 { public: void product() //生产方法 { cout<<"生产一部vivo x7"<<endl; } void sell() //销售方法 { cout<<"售出一部vivo x7"<<endl; } }; class APPLE_7 : public List_7 //iPhone7系列 { public: void product() //生产方法 { cout<<"生产一部iphone7"<<endl; } void sell() //销售方法 { cout<<"售出一部iPhone7"<<endl; } }; class List_PLUS7 //手机7plus系列 { public: virtual void product(){}; //生产虚函数 virtual void sell(){}; //销售虚函数 }; class VIVO_PLUS7 : public List_PLUS7 //vivo7plus手机 { public: void product() //生产方法 { cout<<"生产一部vivo x7 plus"<<endl; } void sell() //销售方法 { cout<<"售出一部vivo x7 plus"<<endl; } }; class APPLE_PLUS7 : public List_PLUS7 //iPhone7plus手机 { public: void product() //生产方法 { cout<<"生产一部iphone7 plus"<<endl; } void sell() //销售方法 { cout<<"售出一部iPhone7 plus"<<endl; } }; class IFactory //工厂类基类 { public: virtual List_7* createList7(){}; //7系列手机工厂 virtual List_PLUS7* createList7plus(){}; //7plus系列手机工厂 }; class VIVO_Factory : public IFactory //vivo工厂 { public: List_7* createList7() //vivo7生产 { return (new VIVO_7); } List_PLUS7* createList7plus() //vivo7plus生产 { return (new VIVO_PLUS7); } }; class APPLE_Factory : public IFactory //iPhone工厂 { public: List_7* createList7() //iPhone7生产 { return (new APPLE_7); } List_PLUS7* createList7plus() //iPhone7plus生产 { return (new APPLE_PLUS7); } }; int main() { IFactory* factory = new VIVO_Factory; //工厂类基类指针指向vivo手机工厂 List_7* vivix7 = factory->createList7(); //生产一部vivo7 vivix7->product(); vivix7->sell(); cout<<endl; List_PLUS7* vivix7plus = factory->createList7plus(); //生产一部vivo7plus vivix7plus->product(); vivix7plus->sell(); cout<<endl; IFactory* apple_factory = new APPLE_Factory; //工厂类基类指针指向vivo手机工厂 List_7* APPLE7 = apple_factory->createList7(); //生产一部iphone7 APPLE7->product(); APPLE7->sell(); cout<<endl; List_PLUS7* APPLE7PLUS = apple_factory->createList7plus(); //生产一部iphone7plus APPLE7PLUS->product(); APPLE7PLUS->sell(); return 0; }
显示结果:
相关文章推荐
- .Net设计模式学习笔记(三):抽象工厂模式(Abstract Factory)
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式
- java 设计模式 学习笔记(3) 抽象工厂模式
- 设计模式学习笔记-抽象工厂模式
- 设计模式学习笔记(五)—Abstract Factory抽象工厂模式
- 设计模式学习笔记-抽象工厂模式
- 设计模式之抽象工厂模式学习
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式
- 设计模式学习之抽象工厂模式(实现数据访问层)
- 设计模式学习之抽象工厂模式(二)<反射+配置文件>
- 学习设计模式之二:抽象工厂模式(Abstract Factory)
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式 (转)
- 设计模式学习之路——Abstract Factory 抽象工厂模式
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式
- head first 设计模式学习随笔(4)----抽象工厂模式
- 设计模式学习----抽象工厂模式
- 设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式
- 设计模式学习总结-抽象工厂模式(Abstract Factory Pattern)
- 设计模式学习-抽象工厂模式