zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式(Abstract Factory Pattern)

      定义:定义一个用于创建对象的接口,让子类来决定实例化哪个类。

      对于工厂方法模式的组成:
      1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
      2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
      3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
      4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

    using namespace std;
    
    class abstractProduct
    {
    public:
        virtual ~abstractProduct() {};
        virtual void show() = 0;
    };
    
    class Product1 :public abstractProduct
    {
    public:
        void show() { cout << "正在生产一号产品" << endl; }
    };
    
    class Product2 :public abstractProduct
    {
    public:
        void show() { cout << "正在生产二号产品" << endl; }
    };
    
    class Product3 :public abstractProduct
    {
    public:
        void show() { cout << "正在生产三号产品" << endl; }
    };
    
    
    class abstractFactory
    {
    public:
        //纯虚函数,工厂创建产品线,联系工厂与产品的纽带
        virtual abstractProduct * creatProduct() = 0;
    };
    
    class Factory1 :public abstractFactory
    {
    public:
        abstractProduct * creatProduct()
        {
            printf("一号工厂");
            return new Product1();
        }
    };
    
    class Factory2 :public abstractFactory
    {
    public:
        abstractProduct * creatProduct()
        {
            printf("二号工厂");
            return new Product2();
        }
    };
    
    class Factory3 :public abstractFactory
    {
    public:
        abstractProduct * creatProduct()
        {
            printf("三号工厂");
            return new Product3();
        }
    };
    
    int main()
    {
        //创建一号工厂
        Factory1 factory1;
        abstractProduct* pProduct1 = factory1.creatProduct();
        pProduct1->show();
    
        //创建二号工厂
        Factory2 factory2;
        abstractProduct* pProduct2 = factory2.creatProduct();
        pProduct2->show();
    
        //创建三号工厂
        Factory3 factory3;
        abstractProduct* pProduct3 = factory3.creatProduct();
        pProduct3->show();
    
        delete pProduct1;
        delete pProduct2;
        delete pProduct3;
        return 0;
    }

     

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    CocoStudio UI 编辑器的使用
    脚本AI与脚本引擎
    Android 开发问题集合
    cocos2d-x之 CCSpriteBatchNode 用法总结
    图解VS2010打包全过程
    如何写详细设计文档
    母函数(Generating function)详解 — TankyWoo
    【DP_区间DP专辑】 zeroclock
    【DP_概率DP专辑】【from zeroclock's blog】
    【DP_树形DP专辑】【from zeroclock's blog】
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/6590270.html
Copyright © 2011-2022 走看看