当前位置: 首页 > article >正文

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

文章目录

  • 1 抽象工厂
  • 2 客户端的调用

整个结构示意如下:

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

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;
}

http://www.kler.cn/news/10586.html

相关文章:

  • 了解HTTP与HTTPS以及SSL
  • HBuilderX 开发工具
  • 设计模式之《责任链模式》
  • CentOS安装docker
  • 如何使用ChatGPT在1天内完成毕业论文
  • 停车场管理系统文件录入(C++版)
  • JAVA面试真题2023
  • 当深度学习遇上Web开发:Spring和OpenAI如何实现图片生成?
  • NumPy 秘籍中文第二版:五、音频和图像处理
  • k8s、docker关联目录占用空间太大
  • JUC编程之——线程的start方法及底层源码
  • 用Kamailio修复FreeSWITCH的sdp
  • 信息系统项目管理师第四版知识摘编:第23章 组织通用管理​
  • 【MySQL】delete和truncate的用法和区别
  • 每个企业经营者都应该了解的几个网络安全趋势
  • Loki采集Mysql errorlog,你值得拥有的错误日志聚合系统
  • C#调试与测试 | Assert(断言)
  • 【Pytorch】神经网络搭建
  • 常用位运算和二进制做权限管理
  • 熟练了Flex布局之后,该学学Grid布局了
  • 前端项目-12-个人中心-二级路由配置-导航守卫-懒加载
  • Linux常见操作命令【三】
  • 算法模板(2):数据结构(3) 复杂数据结构1
  • Java14新特性
  • sql server存储过程
  • Java------Stream流式编程高级API【groupingBy、flatMap】(六)
  • 记2023第十四届蓝桥杯感受
  • 初识linux之线程控制
  • (二十三)槽函数的书写规则导致槽函数触发2次的问题
  • Microsoft Intune部署方案