• 技术文章 >后端开发 >C#.Net教程

    C++设计模式浅识抽象工厂模式

    黄舟黄舟2017-01-17 13:35:47原创711
    抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    模式实现:

    [code]//create ProductA
    class ProductA{
    public:
        virtual void Show() = 0;
    };
    
    class ProductA1: public ProductA{
    public:
        void Show(){
            std::cout << "I'm ProductA1\n";
        }
    };
    
    class ProductA2: public ProductA{
    public:
        void Show(){
            std::cout << "I'm ProductA2\n";
        }
    };
    
    //create ProductB
    class ProductB{
    public:
        virtual void Show() = 0;
    };
    
    class ProductB1: public ProductB{
    public:
        void Show(){
            std::cout << "I'm ProductB1\n";
        }
    };
    
    class ProductB2: public ProductB{
    public:
        void Show(){
            std::cout << "I'm ProductB2\n";
        }
    };
    
    class Factory{
    public:
        virtual ProductA *CreateProductA() = 0;
        virtual ProductB *CreateProductB() = 0;
    };
    
    class Factory1: public Factory{
    public:
        ProductA *CreateProductA(){
            return new ProductA1();
        }
    
        ProductB *CreateProductB(){
            return new ProductB1();
        }
    };
    
    class Factory2: public Factory{
    public:
        ProductA *CreateProductA(){
            return new ProductA2();
        }
    
        ProductB *CreateProductB(){
            return new ProductB2();
        }
    };
    
    template <typename T>
    void del(T* obj){
        if( obj != NULL){
            delete obj;
            obj = NULL;
        }
    }

    客户端:

    [code]int main(){
        Factory *factoryObj1 = new Factory1();
        ProductA *productObjA1 = factoryObj1->CreateProductA();
        ProductB *productObjB1 = factoryObj1->CreateProductB();
    
        productObjA1->Show();  //Output: I'm ProductA1
        productObjB1->Show();  //Output: I'm ProductB1
    
        Factory *factoryObj2 = new Factory2();
        ProductA *productObjA2 = factoryObj2->CreateProductA();
        ProductB *productObjB2 = factoryObj2->CreateProductB();
    
        productObjA2->Show();  //Output:I'm ProductA2
        productObjB2->Show();  //Output:I'm ProductB2
    
        del(productObjB2);
        del(productObjA2);
        del(factoryObj2);
        del(productObjB1);
        del(productObjA1);
        del(factoryObj1);
    
        return 0;
    }

    以上就是C++设计模式浅识抽象工厂模式的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:C++设计模式浅识状态模式 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中关键字有多少个• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误• asp.net 图片验证码的HtmlHelper• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网