Factory && AbstractFactory

简单工厂:
简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)
这里写图片描述
工厂方法:定义一个用于创建对象的接口,让接口子类通过工厂方法决定实例化哪一个类。
这里写图片描述

class Product{

public:
    virtual ~Product() =0 ;
protected:
    Product();
private:
};
class ConcreteProduct: public Product{
public:
    ~ConcreteProduct();
     ConcreteProduct();


};

class Factory{
public: 
virtual ~Factory() = 0;
virtual Product *CreateProduct() = 0;
protected :
Factory();
};


class ConcreteFactory:public Factory{
public: 
~ConcreteFactory();
ConcreteFactory(){
}
Product *CreateProduct(){
return new ConcreteProduct();
}
};



int main(void){
    Factory *fac = new ConcreteFactory();
    Product *p = fac ->CreateProduct();
    return 0 ;

}

抽象工厂模式(Abstract Factory)
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。(创建一组相关或者相互依赖的对象。)
这里写图片描述

//Product
class AbstractProductA{
public:
    virtual ~AbstractProductA(){}
protected:
    AbstractProductA(){}
};

class AbstractProductB{
public: 
    virtual ~AbstractProductB{}
protected:
     AbstractProductB{}
};
class ProductA1:public AbstractProductA{
public:
    ProductA1(){}
    ~ProductA1(){}
};

class ProductA2:public AbstractProductA{
public:
    ProductA2(){}
    ~ProductA2(){}
};

class ProductB1:public AbstractProductB{

public:
    ProductB1(){}
    ~ProductB1(){}
};


class ProductB2:public AbstractProductB{

public:
    ProductB2(){}
    ~ProductB2(){}
};
class AbstractFactory{
public:
    virtual ~AbstractFactory(){}
    virtual AbstractProductA* CreateProductA() =0;
    virtual AbstractProductB* CreateProductB() =0;
protected:
    AbstractFactory(){}

};

class ConcreteFactory1:public AbstractFactory{
public:
    Concretefactory1(){}
    ~ConcreteFactory1(){}
    AbstractProductA* CreateProductA(){
        return new ProductA1;
}
    AbstractProductB* CreateProductB(){}
        return new ProductB1;
};

class ConcreteFactory2:public AbstractFactory{
public:
    Concretefactory2(){}
    ~ConcreteFactory2(){}
    AbstractProductA* CreateProductA(){
        return new ProductA2;
}
    AbstractProductB* CreateProductB(){
        return new ProductB2;
}

};
int main(void){

    AbstractFactory *cf1 = new ConcreteFactory1();
    cf1 -> CreateProductA();
    cf1 -> CreateProductB();

        AbstractFactory *cf2 = new ConcreteFactory1();
    cf2 -> CreateProductA();
    cf2 -> CreateProductB();

    return 0;
}

区别

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值