C++23种设计模式(1)-工厂方法模式
C++常用的设计模式有23种。
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
为了引入工厂方式模式,我们首先来看一个简单工厂模式,注意简单工厂模式不属于23种设计模式之一,因为简单工厂模式是有缺陷的。下面来看一个简单工厂模式例子。
#include<iostream>
#include<string>
using namespace std;
enum CTYPE{COREA,COREB};
//定义一个基类单核
class SingleCore
{public:virtual void show() = 0;
};
//单核A
class SingleCoreA:public SingleCore
{public:void show() {cout << "SingleCore A" << endl;}
};
//单核B
class SingleCoreB:public SingleCore
{public:void show() {cout << "SingleCore B" << endl;}
};
//唯一的工厂,可以生成A、B两种处理器核,在内部判断
class Factory {public://基类的对象指针指向子类的对象,也就是多态SingleCore* CreateSingleCore(CTYPE ctype){//工厂内部判断if (ctype == COREA){//生产核Areturn new SingleCoreA();}else if (ctype == COREB){//生产核Breturn new SingleCoreB();}else {return NULL;}}
};
int main()
{Factory* factor = new Factory();factor->CreateSingleCore(COREA)->show();getchar();return 0;
}
首先定义了一个基类SingleCore,然后以这个基类定义了两个子类SingleCoreA和SingleCoreB,接着定义了一个工厂类Factory,这个工厂类里的方法应用了多态来动态创建哪个子类。这种方法的缺陷是增加新的核类型时,必须修改工厂类Factory,这就违反了开放封闭原则。
针对简单工厂模式的缺陷,我们修改上述代码,换成工厂方法模式,如下所示:
#include<iostream>
#include<string>
using namespace std;
enum CTYPE { COREA, COREB };
//定义一个基类单核
class SingleCore
{public:virtual void show() = 0;
};
//单核A
class SingleCoreA :public SingleCore
{public:void show() {cout << "SingleCore A" << endl;}
};
//单核B
class SingleCoreB :public SingleCore
{public:void show() {cout << "SingleCore B" << endl;}
};
//定义一个工厂的基类
class Factory {public:virtual SingleCore* CreateSingleCore() = 0;
};
//生产A核的工厂
class FactoryA :public Factory
{public:SingleCore* CreateSingleCore() {return new SingleCoreA();}
};
//生产B核的工厂
class FactoryB :public Factory
{public:SingleCore* CreateSingleCore() {return new SingleCoreB();}
};int main()
{FactoryA* a = new FactoryA();a->CreateSingleCore()->show();getchar();return 0;
}
工厂模式也有缺点,每增加一种产品,就需要增加一个对象的工厂。
C++23种设计模式(1)-工厂方法模式相关推荐
- 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之工厂方法模式
· 工厂方法模式在王者荣耀中的应用 · 一.简述 王者荣耀这款游戏目前一共有100位英雄,游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业. 在本实例中, ...
- 23种设计模式之工厂方法模式
工厂方法模式的定义 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂方法使一个类的实例化延迟到其子类 工厂方法模式的通用类图: 其中 Product 负责产品的共性,实现对事物最抽 ...
- 23种设计模式之工厂方法模式(黑马程序员)
工厂方法模式 一.概述 二.结构 三.实现 四.总结 在最后 一.概述 定义一个用户创建对象的工厂(接口),让接口的子类决定去实例化哪个对象,依赖其抽象编程.即工厂方法使一个类的实例化延迟到其工厂的子 ...
- 一天一种设计模式之六-----工厂方法模式
2019独角兽企业重金招聘Python工程师标准>>> 一.工厂方法模式 工厂方法模式属于创建型模式. 工厂方法模式定义:定义一个用于创建对象的借口,让子类决定实例化哪一个类.工厂方 ...
- 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...
- 设计模式之工厂方法模式(创建型)
一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...
- 设计模式之工厂方法模式应用例题
设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
最新文章
- python 日期时间处理 常用方法
- TCP/IP总结(4)TCP 之数据包格式
- pycharm的中自定义库和关键字_Python“库”在树莓派中的应用解析
- ~~做过的好玩的题~~
- C# Socket网络编程精华篇
- 操作系统实验以及课程设计
- __name__ == ‘__main__‘的原理
- Jsp使用Cookie完成记住账号密码的功能
- 那年学过的Java笔记三核心类库二
- jQuery获取select onChange的值
- CSS兼容性解决方法!important的IE7,Firefox问题
- python测试rabbitmq简易实例
- 数据链路层的介质访问控制协议
- Redis Sentinel实现的机制与原理详解
- 如何直观理解粒子滤波并进行Python编程实践
- python艺术分形数_分形维度特征——基于Python实现
- 医疗服务多元化监管,平安智慧城市给出“深圳经验”
- [精品书单]3D打印机课程设计
- 阿里云服务器防止ddos被攻击
- Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊