首页 > 编程语言 >工厂模式C++实现 (内附简单源码实现)

工厂模式C++实现 (内附简单源码实现)

时间:2023-01-04 10:37:06浏览次数:44  
标签:部件 液晶 内附 显示器 电路板 C++ 工厂 源码 生产

抽象工厂模式

  • 为什么要用抽象工厂模式?
    *

  • 举个实际应用的例子,一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的;这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产液晶显示器电路板;工厂一直就这样运行着。有一天,总经理发现,直接生产显示器的其余部分也挺挣钱,所以,总经理决定,再建立两个工厂C和D;C负责生产非液晶显示器的其余部件,D负责生产液晶显示器的其余部件。此时,旁边参谋的人就说了,经理,这样做不好,我们可以直接在工厂A中添加一条负责生产非液晶显示器的其余部件的生产线,在工厂B中添加一条生产液晶显示器的其余部件的生产线,这样就可以不用增加厂房,只用将现有厂房进行扩大一下,同时也方便工厂的管理,而且生产非液晶显示器电路板的技术人员对非液晶显示的其余部件的生产具有指导的作用,生产液晶显示器电路板也是同理。总经理发现这是一个不错的主意。

  • 再回到软件开发的过程中来,总经理再次建立工厂C和D,就是重复工厂方法模式,只是生产的产品不同罢了。这样做的弊端就如参谋所说的那样,增加了管理成本和人力成本。在面向对象开发的过程中,是很注重对象管理和维护的,对象越多,就越难进行管理和维护;如果工厂数量过多,那么管理和维护的成本将大大增加;虽然生产的是不同的产品,但是可以二者之间是有微妙的关系的,如参谋所说,技术人员的一些技术经验是可以借鉴的,这就相当于同一个类中的不同对象,之间是可以公用某些资源的。那么,增加一条流水线,扩大厂房,当然是最好的主意了。

  • UML图

Factory

  • 可以简单的把 Factory 看做是工厂A,Factory1 Factory2 看做两条生产线,这样就集中了生产线的管理
//程序实例(抽象工厂模式)
//单核    
class SingleCore
{
public:
    virtual void Show() = 0;
};

class SingleCoreA: public SingleCore
{
public:
    void Show() { cout << "Single Core A" << endl; }
};

class SingleCoreB:public SingleCore
{
public:
    void Show() { cout << "Single Core B" << endl; }
};


//多核    
class MultiCore
{
public:
    virtual void Show() = 0;
};

class MultiCoreA: public MultiCore
{
public:
    void Show() { cout << "Multi Core A" << endl; }

};

class MultiCoreB: public MultiCore
{
public:
    void Show() { cout << "Multi Core B" << endl; }
};

//工厂    
class CoreFactory
{
public:
    virtual SingleCore* CreateSingleCore() = 0;
    virtual MultiCore* CreateMultiCore() = 0;
};

//工厂A,专门用来生产A型号的处理器    
class FactoryA:public CoreFactory
{
public:
    SingleCore* CreateSingleCore() { return new SingleCoreA(); }
    MultiCore* CreateMultiCore() { return new MultiCoreA(); }
};

//工厂B,专门用来生产B型号的处理器    
class FactoryB: public CoreFactory
{
public:
    SingleCore* CreateSingleCore() { return new SingleCoreB(); }
    MultiCore* CreateMultiCore() { return new MultiCoreB(); }
};

标签:部件,液晶,内附,显示器,电路板,C++,工厂,源码,生产
From: https://www.cnblogs.com/FlyingDoG--BoxPiG/p/17024140.html

相关文章

  • 【collection】5.Map关键子类源码剖析
    Map源码剖析HashMap&LinkedHashMap&HashtablehashMap默认的阈值是0.75HashMapput操作put操作涉及3种结构,普通node节点,链表节点,红黑树节点,针对第三种,红黑树节点,我......
  • C++ | 4-易用性改进
    使用auto自动类型推断,顾名思义,就是编译器能够根据表达式的类型,自动决定变量的类型(从C++14开始,还有函数的返回类型),不再需要程序员手工声明。但需要说明的是,auto并没有......
  • ​硬核来袭 | 2 万字 + 10 图带你手撕 STL 关联式容器源码
    本篇已同步收录GitHub仓库,这里有小贺的源码阅读笔记:https://github.com/rongweihe/CPPNotes/tree/master/STL-source-code-notes大家好,我是小贺。鸽了好久的 STL源码系......
  • 《STL 源码剖析》学习笔记之容器(一)vector
    [图]TheContainer 2019-08-01前言侯捷大师的《STL源码剖析》,实乃一本神书,可以说也是一本很硬核的书了,不管是实验室的师兄师姐,还是牛客网上一些大佬们,都无不推荐此书,想要深......
  • C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程
    1.前言前文介绍了如何使用“高斯消元法”求解线性方程组。本文秉承有始有终的态度,继续介绍“非线性方程”的求解算法。本文将介绍2个非线性方程算法:牛顿迭代法。二......
  • C++11:移动构造函数
    1.拷贝构造函数中的深拷贝问题在C++98/03标准中,如果想用其它对象初始化一个同类的新对象,只能借助类中的拷贝构造函数。拷贝构造函数的实现原理很简单,就是为新对象复制......
  • PostgreSQL源码结构
    PostgreSQL源码结构  5440 次浏览      6 2019-9-6 编辑推荐:本文来自于csdn,本文主要介绍了PostgreSQL......
  • 在线客服系统实现消息声音提醒效果 - 在线客服系统源码
    在在线客服系统中实现消息声音提醒效果可以带来许多好处,包括:改善用户体验:通知声音可以帮助提醒用户有新消息,鼓励他们及时回复,提高整体用户体验。提高生产率:通过提醒......
  • 《STL 源码剖析》学习笔记之容器(二)list
    [图]Theorange 2019-08-061、list概述相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次安插或删除一个元素,就配置或释放一个元素空间。因此,list对于空间......
  • java基于springboot外卖系统在线订餐系统app源码厨艺论坛APP
    简介本项目主要包括了外卖订餐系统(在线订餐和外卖配送)、厨艺论坛系统、管理员后台、用户中心等功能。用户注册后可以选择餐桌在线点餐支付,也可以选择外卖配送到家的方式。......