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

    #include <iostream>
    struct I_Pro
    {
        virtual void fun() = 0;
    };
    
    class A : public I_Pro
    {
    public:
        virtual void fun();
    };
    void A::fun()
    {
        std::cout << "funA" << std::endl;
    }
    
    
    class B : public I_Pro
    {
    public:
        virtual void fun();
    };
    void B::fun()
    {
        std::cout << "funB" << std::endl;
    }
    
    struct I_Factry
    {
        virtual I_Pro* createPro() = 0;
    };
    
    class FactoryA : public I_Factry
    {
        virtual I_Pro*  createPro();
    };
    
    I_Pro* FactoryA::createPro()
    {
        I_Pro* ptr  = new A;
    
        return ptr;
    }
    
    int main()
    {
        //工厂就是搞两个工厂,每个工厂对应一个产品,这解决简单工厂模式的问题,但治标不治本
        I_Factry* ptr = new FactoryA;//不知这里factory还要搞个抽象类,莫非是为了以后有可能有多个工厂考虑的
        I_Pro* pro = ptr->createPro();
        pro->fun();
    
        //I_Factry* ptr = new FactoryA;//不知这里factory还要搞个抽象类,莫非是为了以后有可能有多个工厂考虑的
        //I_Pro* pro = ptr->createPro();
        //pro->fun();
    
        getchar();
        return 0;
    }

     抽象工厂模式:

    在添加子类时,子类不需要继承抽象类的接口,这样就给增加子类添加了难度,抽象工厂就把有相同接口的子类归为一类,然后针对这些子类创建一个工厂,其他类型的子类也创建一个工厂,然后用户需要知道在那个工厂里面在相应工厂里面创建子类产品即可,这也没有太大的难度,但增加了程序的代码量。

  • 相关阅读:
    Asp.Net开发小技巧汇总
    .net缓存
    C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧(二)
    字符和数组
    jvm调优原则
    ASP.NET页面刷新的实现方法
    js禁止右键和复制功能
    动态定义SL DataGrid Columns [转]
    DataGrid 内嵌ComboBox动态数据联动
    C#对象序列化(2)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4020654.html
Copyright © 2011-2022 走看看