• 设计模式之抽象工厂模式(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;
    }

     

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    zz--Add-Migration与EF及Mysql的使用。。
    最后学期
    E. Tree Queries 题解(思维+dfs序)
    D. 0-1 MST 题解(补图的联通块)
    F. Equalizing Two Strings 题解(思维)
    CSUST 白银御行想展示 题解(思维)
    E2. Rubik's Cube Coloring (hard version) 题解(dp+思维)
    D. Hemose in ICPC ? 题解(二分+dfs序+交互)
    C. Bakry and Partitioning 题解(思维+两次dfs)
    E. Bored Bakry 题解(二进制+思维)
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/6590270.html
Copyright © 2020-2023  润新知