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)-工厂方法模式相关推荐

  1. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之工厂方法模式

    · 工厂方法模式在王者荣耀中的应用 · 一.简述 王者荣耀这款游戏目前一共有100位英雄,游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业. 在本实例中, ...

  2. 23种设计模式之工厂方法模式

    工厂方法模式的定义 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂方法使一个类的实例化延迟到其子类 工厂方法模式的通用类图: 其中 Product 负责产品的共性,实现对事物最抽 ...

  3. 23种设计模式之工厂方法模式(黑马程序员)

    工厂方法模式 一.概述 二.结构 三.实现 四.总结 在最后 一.概述 定义一个用户创建对象的工厂(接口),让接口的子类决定去实例化哪个对象,依赖其抽象编程.即工厂方法使一个类的实例化延迟到其工厂的子 ...

  4. 一天一种设计模式之六-----工厂方法模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.工厂方法模式 工厂方法模式属于创建型模式. 工厂方法模式定义:定义一个用于创建对象的借口,让子类决定实例化哪一个类.工厂方 ...

  5. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  7. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  8. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  9. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  10. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

最新文章

  1. python 日期时间处理 常用方法
  2. TCP/IP总结(4)TCP 之数据包格式
  3. pycharm的中自定义库和关键字_Python“库”在树莓派中的应用解析
  4. ~~做过的好玩的题~~
  5. C# Socket网络编程精华篇
  6. 操作系统实验以及课程设计
  7. __name__ == ‘__main__‘的原理
  8. Jsp使用Cookie完成记住账号密码的功能
  9. 那年学过的Java笔记三核心类库二
  10. jQuery获取select onChange的值
  11. CSS兼容性解决方法!important的IE7,Firefox问题
  12. python测试rabbitmq简易实例
  13. 数据链路层的介质访问控制协议
  14. Redis Sentinel实现的机制与原理详解
  15. 如何直观理解粒子滤波并进行Python编程实践
  16. python艺术分形数_分形维度特征——基于Python实现
  17. 医疗服务多元化监管,平安智慧城市给出“深圳经验”
  18. [精品书单]3D打印机课程设计
  19. 阿里云服务器防止ddos被攻击
  20. Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊

热门文章

  1. 字节跳动西瓜视频一面面经
  2. AI-支持向量机分类预测
  3. 酒店行业如何建立积分体系促进会员消费?
  4. Component和PureComponent的区别
  5. 惜时间_一个珍惜时间的人
  6. MyBatis Generator 逆向工程插件
  7. Nand Flash结构及错误机制
  8. xml.sax包详解
  9. npm更新/替换版本
  10. 讲真的,千万别得罪会PS的人