zoukankan      html  css  js  c++  java
  • c++设计模式——工厂模式

    简单工厂模式,一个工厂,多个产品;增加一种产品,就要修改工厂类中的代码,违反了对扩展开放,对修改关闭原则,会使得代码边的臃肿

    #include <iostream>
    using namespace std;
    
    class Product
    {
    public:
        virtual void show()=0;
    };
    class PA:public Product
    {
    public:
        void show()
        {
            cout<<"this is a"<<endl;
            return ;
        }
    };
    class PB:public Product
    {
    public:
        void show()
        {
            cout<<"this is b"<<endl;
            return ;
        }
    };
    class Factroy
    {
    public:
        Product* create(int i)
        {
            switch (i)
            {
            case 1:
                return new PA();
                break;
            case 2:
                return new PB();
                break;
            default:
                return nullptr;
            }
            return nullptr;
        }
    };
    int main()
    {
        
        Factroy f;
        f.create(1)->show();
        f.create(2)->show();
    
        return 0;
    }

    定义一个创建对象的接口, 让其子类自己决定实例化哪一个工厂类,多个工厂多个产品,当增加一个新产品时,同时增加一个新工厂。增加新工厂属于扩展,不会修改以前工厂类和产品类的任何代码。

    #include <iostream>
    using namespace std;
    
    class Product
    {
    public:
        virtual void show()=0;
    };
    class PA:public Product
    {
    public:
        void show()
        {
            cout<<"this is a"<<endl;
            return ;
        }
    };
    class PB:public Product
    {
    public:
        void show()
        {
            cout<<"this is b"<<endl;
            return ;
        }
    };
    
    class Factroy
    {
    public:
        virtual Product* create()=0;
    };
    class FA:public Factroy
    {
    public:
        Product* create()
        {
            return new PA();
        }
    };
    class FB:public Factroy
    {
    public:
        Product* create()
        {
            return new PB();
        }
    };
    int main()
    {
        FA fa;
        fa.create()->show();
        FB fb;
        fb.create()->show();
        return 0;
    }
  • 相关阅读:
    实验室资质认定评审准则和要素及要点
    如何进行内审?
    实验室比对结果评价的3种方法
    第一次如何申请CNAS实验室认可资质
    风险评估的实施步骤
    Servlet
    CMMI_SCAMPY评估方法
    PHP_2
    PHP_1
    java中String与StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/tianzeng/p/12458828.html
Copyright © 2011-2022 走看看