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

    一.简单工厂模式

    简单工厂模式是根据传入工厂类的参数,动态决定创建哪一类产品类

    一个工厂类负责多个产品类,根据传进来的参数决定生产哪个产品

    //产品类
    class Product{
    
    public:
            virtual void show()==0;
    
    };
    
    class Product_A:public Product{
    
    public:
            void show(){
                cout<<"Product_A"<<endl;
            }
    
    };
    class Product_B:public Product{
        
    public:
            void show(){
                cout<<"Product_B"<<endl;
            }
    };
    
    //工厂类
    class Factory{
    
    public:
            Product* Create(int i){
                switch(i){
                    case 1:
                        return new Product_A;
                        break;
                    case 2:
                        return new Product_B;
                        break;
                    default:
                        break;
                }
            }
    };
    //调用
    int main(){
        Factory* factory=new Factory();
        factory->Create(1)->show();
        factory->Create(2)->show();
    }

    二.工厂方法模式

    多个工厂类对应多个产品类,一个工厂类对应一个产品类,互不干扰

    //产品类
    class Product{
    
    public:
            virtual void show()=0;
    };
    
    class Product_A:public Product{
    
    public:
            void show(){
                cout<<"Product_A"<<endl;
            }
    };
    
    class Product_B:public Product{
    
    public:
            void show(){
                cout<<"Product_B"<<endl;
            }
    };
    //工厂类
    class Factory{
    
    public:
            virtual Product* create()=0;
    };
    
    class Factory_A:public Factory{
    
    public:
            Product* create(){
                return new Product_A;
            }
    };
    
    class Factory_B:public Factory{
    
    pubilc:
            Product* create(){
                return new Product_B;
            }
    };
    //调用
    int main(){
        Factory_A* productA=new Factory_A();
        Factory_B* productB=new Factory_B();
    
        productA->create()->show();
        productB->create()->show();
    }

    三.抽象工厂模式

    多个工厂类对应多个不同种类的产品类,一个工厂类对应一个种类多个产品类,互不干扰

    //产品类
    class Product1{
    
    public:
            virtual void show()=0;
    };
    
    class Product_A1:public Product1{
    
    public:
            void show(){
                cout<<"product_A1"<<endl;
            }
    };
    
    class Product_B1:public Product1{
        
    public:
            void shwo(){
                cout<<"product_B1"<<endl;
            }
    };
    
    
    class Product2{
    
    public:
            virtual void show()=0;
    };
    
    class product_A2:public Product2{
    
    public:
            void show(){
                cout<<"product_A2"<<endl;
            }
    };
    
    class product_B2:public Product2{
    
    public:
            void show(){
                cout<<"product_B2"<<endl;
            }
    };
    //工厂类
    class Factory{
    
    public:
            virtual Product1* create1()=0;
            virtaul Product2* create2()=0;
    };
    
    class FactoryA{
    
    public:
            Product1* create1(){
                return new product_A1();
            }
            Product2* create2(){
                return new product_A2();
            }
    };
    
    class FactoryB{
    
    public:
            Product1* create1(){
                return new product_B1();
            }
            Product2* create2(){
                return new product_B2();
            }
    };
    int main(){
        FactoryA* factoryA=new FactoryA();
        factoryA->create1()->show();
        factoryB->create2()->show();
    
        FactoryB* factoryB=new FactoryB();
        factoryB->create1()->show();
        factoryB->create2()->show();
    }
  • 相关阅读:
    PHP 创建二叉树镜像(交换左右子树)
    PHP 使用二叉树的先序和中序遍历结果构造二叉树
    PHP 不用求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
    PHP 不用加减乘除做加法
    PHP 跳台阶问题
    PHP 输入一个整数,求该整数的二进制表达中有多少个1
    PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
    PHP 查找链表倒数第i个节点
    .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
    johnsuna 的收藏精品
  • 原文地址:https://www.cnblogs.com/k5bg/p/11063271.html
Copyright © 2011-2022 走看看