工厂方法模式
2023-09-14 09:12:43 时间
看到这,我认为你已经看过上节的简单工厂模式了,那么这节对你来说将很easy~~~,只需要了解开闭原则的概念即可。
工厂方法模式是对简单工厂模式的一种改进,因为在简单工厂模式违反了开闭原则,如果你想新生产一个产品,需要修改工厂内的方法。而开闭原则告诉我们,如果要增加新功能,尽量用增加代码而不是修改代码的方式,这样会减少对其他功能的错误修改。场景:相对于简单工厂,现在把工厂也抽象为一个抽象类,然后派生子类,想新生产一个产品就派上一个新类,让它来完成对产品的new实例化,这就符合开闭原则。其他无异于简单工厂模式。
这些代码都是在学习这些的过程中码的。。。。。
上代码,亲测有效!
#include <iostream>
#include <string>
using namespace std;
//简单工厂模式缺点:违反开闭原则,当需要增加新种类处理器
//如CoreC时,需要修改Factory类的方法,而不是直接添加模块
enum TYPE
{
COREA,
COREB
};
//处理器基类
class Core
{
public:
virtual void show() = 0;
};
//处理器子类CoreA
class CoreA : public Core
{
public:
void show()
{
cout << "CoreA" << endl;
}
};
//处理器子类CoreB
class CoreB : public Core
{
public:
void show()
{
cout << "CoreB" << endl;
}
};
//工厂基类
class Factory
{
public:
virtual Core* Product() = 0;
};
//工厂子类,用于生产CoreA
class FactoryA : public Factory
{
public:
CoreA* Product()
{
return new CoreA;
}
};
//工厂子类,用于生产CoreB
//此时要增加新产品,直接定义类FactoryC
class FactoryB : public Factory
{
public:
CoreB* Product()
{
return new CoreB;
}
};
int main(void)
{
//要生产CoreA,实例化A工厂
Factory* factA = new FactoryA;
//用A工厂生产CoreA
Core* core = factA->Product();
//验证工厂是否生产出CoreA
core->show();
//要生产CoreB,实例化B工厂
Factory* factB = new FactoryB;
//用工程B生产CoreB
core = factB->Product();
//验证是否生产出CoreB
core->show();
//释放factA,factB,及core
delete factA;
delete factB;
delete core;
system("pause");
return 0;
}
相关文章
- php在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数
- 设计模式(三)—— 工厂方法模式
- 设计模式之工厂方法模式
- SQL SERVER出现大量一致性错误的解决方法
- 工厂方法模式
- C#设计模式——工厂方法模式(Factory Method Pattern)
- 工厂方法模式
- Warning: $HADOOP_HOME is deprecated.的原因以及解决方法
- Java实现单例模式的9种方法
- Xml 常用属性、方法
- 前端面试题:脱离布局流有几种方法?
- Atitit 设计模式之道 艾提拉著 sbb 目录 1. 一、设计模式的分类1 1.1. 总体来说设计模式分为三大类:1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建
- Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
- Express engine 学习笔记 - app.engine 的使用方法
- Qt 单例模式的实现(4种方法)
- 超简易对比简单工厂模式和工厂方法模式
- 简单工厂模式、工厂方法模式、抽象工厂模式 用图理解
- Python中单例模式的使用方法
- 004-行为型-02-模板方法模式(Template Method)
- 设计模式------工厂方法模式
- php工厂方法模式
- 工厂方法模式
- 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式
- 设计模式(Python语言)----工厂方法模式
- Redis哨兵(Sentinel)模式的配置方法及其在Java中的用法
- 基于交替方向乘法(ADMM)的PAPR约束下传输波束成形器设计的方法研究(Python代码实现)