【C++学习笔记】十、C++设计模式-抽象工厂模式


整个结构示意如下:

抽象类只做接口,不做实现,所有具体实现都是集成其抽象类。

AbstractFactory ProductA ProductB ConcreteProductA1 ConcreteProductA2 ConcreteProductB1 ConcreteProductB2 ConcreteFactory1 ConcreteFactory2 Inherits Inherits Inherits Inherits Inherits Inherits herits herits

1 抽象工厂

抽象类只做接口,不做实现

定义抽象产品


// 抽象产品类
class ProductA {
public:
    virtual void doSomething() = 0;
};

class ProductB {
public:
    virtual void doSomething() = 0;
};

定义具体产品类: 产品实际实现

// 具体产品类
class ConcreteProductA1 : public ProductA {
public:
    void doSomething() override { cout << "ConcreteProductA1 do something." << endl; }
};

class ConcreteProductA2 : public ProductA {
public:
    void doSomething() override { cout << "ConcreteProductA2 do something." << endl; }
};

class ConcreteProductB1 : public ProductB {
public:
    void doSomething() override { cout << "ConcreteProductB1 do something." << endl; }
};

class ConcreteProductB2 : public ProductB {
public:
    void doSomething() override { cout << "ConcreteProductB2 do something." << endl; }
};
// 抽象工厂类
class AbstractFactory {
public:
    virtual ProductA* createProductA() = 0;
    virtual ProductB* createProductB() = 0;
};

// 具体工厂类
class ConcreteFactory1 : public AbstractFactory {
public:
    ProductA* createProductA() override { return new ConcreteProductA1(); }
    ProductB* createProductB() override { return new ConcreteProductB1(); }
};

class ConcreteFactory2 : public AbstractFactory {
public:
    ProductA* createProductA() override { return new ConcreteProductA2(); }
    ProductB* createProductB() override { return new ConcreteProductB2(); }
};

2 客户端的调用

// 客户端代码
int main() {
    //创建工厂1
    AbstractFactory* factory = new ConcreteFactory1();
	//创建对应的产品
    ProductA* productA = factory->createProductA();
    ProductB* productB = factory->createProductB();
    //产品中的方法实现
    productA->doSomething();
    productB->doSomething();

    //销毁产品
    delete productA;
    delete productB;

    //创建工厂2
    factory = new ConcreteFactory2();
    //工厂2中创建对应的产品
    productA = factory->createProductA();
    productB = factory->createProductB();

    //产品中的方法实现
    productA->doSomething();
    productB->doSomething();

    //销毁产品和工厂
    delete productA;
    delete productB;
    delete factory;

    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高启强不卖鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值