首页 > 其他分享 >工厂模式 FactoryMethod模式

工厂模式 FactoryMethod模式

时间:2022-08-21 13:11:39浏览次数:49  
标签:int class FactoryMethod Factory 模式 工厂 Produce public

工厂模式 factoryMethod

1 定义

​ 定义一个勇于创建产品对象的工厂接口,让工厂子类决定实例化哪一个产品类

2 设计思想

​ 其实就是客户需要什么类,就去创建什么具体的类。具体类的实现并不是由工厂来实现的,而是由客户自己决定到底是创建哪个类。

(但是我个人感觉有点奇怪啊,客户怎么知道到底有哪些类呢??,但是同样的,简单工厂模式,客户也是不知道都有哪些类的,所以这个不重要,哈哈哈哈哈)

3 结构类图

image

4 常用场景

主要是生成复杂对象实例,尝试使用工厂模式来代替。就是并不对外暴露该对象的实现,用户不用关心如何实现的。

​ 明确的分割创建对象和 管理对象的职责。

​ 简单工厂模式:适用于产品种类比较少,获取扩展的概率比较低的情况。

4 具体的代码例子

#include <iostream>

// 使用计算器来作为例子
class Produce
{
public:
    virtual int operation(int a, int b) = 0;
    virtual ~Produce()
    {   

    }
};

class ProduceAdd:public Produce
{
public:
    int operation(int a, int b) override
    {   
         return a + b;
    }   
};

class ProduceMul:public Produce
{
public:
    int operation(int a, int b) override
    {
        return a * b;
    }   
};


// 定义工厂
class Factory
{                                                                                                                                                                                           
public:
    virtual Produce* create_product() = 0;
    virtual ~Factory()
    {
    
    }
};

class FactoryAdd:public Factory
{
public:
    Produce *create_product()override
    {
        return new ProduceAdd();
    }
};

class FactoryMul:public Factory
{
public:
    Produce *create_product()override
    {
        return new ProduceMul();
    }
};


#endif         


// 进行测试
  1 #include "factoryMethod.h"
  2 #include <iostream>
  3 
  4 using namespace std;
  5     
  6 int main()
  7 {
  8     // 使用,都是先创建工厂,之后在创建产品,然后消耗产品
  9     Factory *factoryAdd = new FactoryAdd();
 10     Factory *factoryMul = new FactoryMul();
 11 
 12     Produce *productAdd = factoryAdd->create_product();
 13     Produce *produceMul = factoryMul->create_product();
 14 
 15     int res1 = productAdd->operation(1,2);
 16     cout << "add(1,2) = " << res1 << endl;
 17 
 18     cout << "mul(1,2) = " << produceMul->operation(1,2) << endl;
 19 
 20     delete produceMul;
 21     delete productAdd;
 22     delete factoryAdd;
 23     delete factoryMul;                                                                                                                                                                  
 24 
 25     return 0;
 26 }   
 27 
// 输出结果
     
add(1,2) = 3
mul(1,2) = 2

缺点:每次重新创建一个产品的时候,就需要新建一个工厂,类的数量增加较多,类之间的关系比较复杂。

标签:int,class,FactoryMethod,Factory,模式,工厂,Produce,public
From: https://www.cnblogs.com/moxianbaolianxisheng/p/16609835.html

相关文章

  • 设计模式09 - 设计模式 - 装饰器模式(结构型)
    一、定义装饰器(Decorator)模式:指不改变现有对象结构的情况下,动态地给该对象增加额外功能。它是继承方式的一种替代方案。这种模式创建了一个装饰类,用来包装原有......
  • 【系统设计】FMEA(Fail Model and Effect Analysis)故障模式与影响分析(又称失效模式与后
     FEMAFMEA方法:(1)给出初始的架构图(2)假设某个部件出现故障(3)分析次故障对系统功能造成的影响(4)根据分析结果判断是否需要优化架构 FMEA举例:软件系统设计 ......
  • Spring体现的设计模式
    涉及到的模式工厂设计模式:Spring使用工厂模式通过BeanFactory、ApplicationContext创建bean对象。代理设计模式:SpringAOP功能的实现。单例设计模式:Sprin......
  • 33. Redis---哨兵模式
    1.前言在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且......
  • 32. Redis---主从模式
    1.前言在软件的架构中,主从模式(Master-Slave)是使用较多的一种架构。主(Master)和从(Slave)分别部署在不同的服务器上,当主节点服务器写入数据时,同时也会将数据同步至从节点服务......
  • 记Window 10 WSL 下运行hbase 本机模式的一个错误及解决: /bin/java: No such file or
    运行环境及问题描述:系统:Window10WSL(LinuxUbuntu)在window环境里安装了JDK11至目录:C:\Application\Java\jdk-11.0.16,并设置了JAVA_HOME环境变量在WSLUbuntu也......
  • 设计模式学习(5)一致性
    组合模式在文件系统中,文件夹和文件具有一致性将文件夹和文件当作同一种东西看示例模拟一个文件系统。文件和文件夹都具有名称和大小,我们将其抽象成Entry。但是文件......
  • C#中通过Command模式实现Redo/Undo方案
    原文网址:https://www.jb51.net/article/252018.htm一个比较常见的改进用户体验的方案是用Redo/Undo来取代确认对话框,由于这个功能比较常用,本文简单的给了一个在C#中通过C......
  • 设计模式之责任链
    概述责任链模式(ChainofResponsibilityPattern)属于行为型设计模式。它为请求创建了一个处理链条,这个链条上的所有对象都要对这个请求进行处理。比如我们生活中经常使用......
  • 飞凌FCU2201设置wifi sta模式
    除了官方文档里写的删除掉两个文件外,mv/etc/systemd/system/multi-user.target.wants/hostapd.service/etc/systemd/system/multi-user.target.wants/hostapd.service.b......