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

C++设计模式之工厂模式(中)——工厂模式

工厂模式

  • 工厂模式
    • 介绍
    • 示例
    • 示例使用
    • 运行结果
    • 工厂模式与简单工厂模式区别

工厂模式

工厂模式在简单工厂模式的基础之上进行了改进。当需要生产的产品种类增加,可以通过新增子类工厂来生产,没有破坏程序设计原则中的开放封闭原则。

介绍

工厂模式先抽象出一个抽象工厂,再子类化抽象工厂,将对应产品对象的创建放在子类工厂中。也就是一个子工厂负责生产一种产品,即具体的产品对象由对应的具体的子工厂创建。当产品种类增加,只需增加新的子工厂来生产,遵守开放封闭原则。

示例

本示例接上篇的简单工厂模式。在原本示例的基础上进行改进。将采用简单工厂设计模式的示例改为采用工厂设计模式的示例。

class PenHolder 
{
public:virtual void introduce() = 0;
};class PlasticPenHolder :public PenHolder 
{
public:void introduce()override {cout << "I am PlasticPenHolder!" << endl;}
};class IronPenHolder :public PenHolder 
{
public:void introduce()override {cout << "I am IronPenHolder!" << endl;}
};class BaseFactory 
{
public:virtual PenHolder * createPenHolder() = 0;
};class PlasticFactory :public BaseFactory 
{
public:PenHolder* createPenHolder()override {return new PlasticPenHolder;}
};class IronFctory :public BaseFactory 
{
public:PenHolder* createPenHolder() override{return new IronPenHolder;}
};

示例使用

int main() 
{cout << "工厂模式输出:" << endl;BaseFactory *baseFactory1 = new PlasticFactory;PenHolder* penHolder1 = baseFactory1->createPenHolder();penHolder1->introduce();delete penHolder1;delete baseFactory1;BaseFactory *baseFactory2 = new IronFctory;PenHolder* penHolder2 = baseFactory2->createPenHolder();penHolder2->introduce();delete penHolder2;delete baseFactory2;return 0;
}

运行结果

在这里插入图片描述

工厂模式与简单工厂模式区别

相同点:
简单工厂模式和抽象工厂模式都是创建型设计模式。
不同点:
1.简单工厂模式只有一个工厂类,通过该工厂类生产不同的产品,代码结构简单易懂。工厂模式先是抽象出一个抽象工厂类,在抽象工厂类中提炼出一个纯虚的工厂函数,派生出不同的子工厂类,重写抽象类中的工厂函数,生产不同的产品对象,一种产品对应一个子工厂类,相对于简单工厂代码复杂性增加。
2.简单工厂模式当产品的种类增加时,需要修改工厂函数,破环了开放封闭原则。工厂模式当产品种类增加,只需增加新的子工厂类来生产新的产品,遵守了程序设计的开放封闭原则,具有很好的扩展性和易维护性。但也有一个弊端:当产品种类很多的时候,从抽象工厂类派生的子工厂类就会很多,造成了程序的继承过大。
3.建档工厂模式适用于需求相对简单的产品创建。工厂模式适用于复杂产品的创建需求。

http://www.lryc.cn/news/246961.html

相关文章:

  • 关于el-table的二次封装及使用,支持自定义列内容
  • 【Vue】Vue3 配置全局 scss 变量
  • C语言—二维数组
  • GUI加分游戏
  • 多线程的重要资料-信号量
  • 区块链相关技术、概念以及技术实现过程中的一些关键问题 Smart Contracts and Blockchains
  • 黑马点评Redis笔记
  • MX6ULL学习笔记 (一)交叉工具链的安装
  • uni-app中的onLoad不执行
  • EFAK-v3.0.1版部署与使用
  • 股票技术从初级到高级,从实盘进阶到摩尔缠论
  • 力扣105. 从前序与中序遍历序列构造二叉树
  • Windows环境下的JDK安装与环境配置
  • 【密码学引论】Hash密码
  • 【传智杯】儒略历、评委打分、萝卜数据库题解
  • java基础-IO
  • Java变量理解
  • 西南科技大学信号与系统A实验二(信号频谱分析)
  • C++-youtube cherno C++视频的一些知识点
  • sed命令
  • 【经验分享】开发问题记录总结(持续更新)
  • MySQL导出数据库中每个表前 3000 条数据
  • Spring事件注解@EventListener【观察】
  • 玩转Spring中强大的spel表达式!
  • HTTPS攻击原理 被攻击该如何防护
  • 【.NET Core】委托(Delegate)应用详解
  • 【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】
  • 《golang设计模式》第三部分·行为型模式-06-备忘录模式(Memento)
  • Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略
  • 角色管理--产品经理岗