设计模式——简单工厂模式

2023-11-15

静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 

模式中包含的角色及其职责:

1.工厂(Creator) 角色

简单工厂模式的核心, 它负责实现创建所有实例的内部逻辑。 工厂类可以被外界直接调用, 创建所需的产品对象。

2.抽象(Product) 角色

简单工厂模式所创建的所有对象的父类, 它负责描述所有实例所共有的公共接口。

3.具体产品(Concrete Product) 角色

简单工厂模式所创建的具体实例对象

è¿éåå¾çæè¿°

应用实例: 

#include<iostream>
#include<string>
using namespace std;

// 水果的基类
class Fruit
{
public:
    virtual void getFruit() = 0;
};

// 添加新产品------------
class Banana: public Fruit
{
public:
    void getFruit(){
        cout<<"Banana"<<endl;
    }
};

class Apple: public Fruit
{
public:
    void getFruit(){
        cout<<"Apple"<<endl;
    }
};
//---------------------

// 专门建一个工厂,用来生产水果
class Factory
{
public:
    Fruit* creat(string name)
    {
           if(name =="Banana")
               return new Banana;
           else if(name =="Apple")
               return new Apple;
           else
               return NULL;
    }
};

int main()
{
    Factory* f = new Factory; // 建一个水果工厂

    Fruit* my1 =  f->creat("Apple"); // 生产苹果
    my1->getFruit();

    Fruit* my2 =  f->creat("Banana");// 生产香蕉
    my2->getFruit();
    return 0;
}

 

简单工厂模式的优缺点 : 

在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式——简单工厂模式 的相关文章

  • VSCODE如何汉化成中文

    VSCODE默认是以英文显示的 对于不习惯用英文的朋友可以将VSCODE汉化成中文 小编来说下如何汉化吧 工具 原料 VSCODE 方法 步骤 1 VSCODE默认情况下是英文的 点击左侧菜单栏最底下的四方形按钮打开扩展程序界面 在输入框内

随机推荐

  • 微信小程序之Image那些事

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 使用场景 二 使用方式 1 动态读取image大小 2 动态设置style 3 动态赋值 总结 前言 小程序中 Image使用频率是非常高的 不同场景下
  • 深度学习移动端在线训练 --- 基于MNN的端侧Finetune实现

    在决定使用MNN实现在线训练之前 也比较了TNN NCNN 发现目前各大端侧推理引擎的训练框架都不成熟 半斤八两的状态 可能都把精力放在推理和op支持上 但是端侧训练的需求真的少么 fine tune在端侧应用难道不是刚需 端侧推理的实现相
  • 爬虫日常-selenium登录12306,绕过验证

    文章目录 前言 代码设计 前言 hello兄弟们 这里是无聊的网友 愉快的周末过去了 欢迎回到学习频道 书接上文 我们说到了再用selenium登录12306时遇到了滑块验证的问题 当前的网站几乎每家都会在登录模块添加一个认证 来规避各种爬
  • maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包 有多个不同的版本 因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的 每个显式声明的类包都会依赖于一些其它的隐式类包 这些隐式的类包会被maven间接引入进来
  • 【技术经验分享】计算机毕业设计hadoop+spark知识图谱医生推荐系统 门诊人数预测 医疗数据可视化 医疗大数据 医疗数据分析 医生爬虫 大数据毕业设计 大数据毕设

    开发技术 springboot vue js element ui spark hadoop lstm情感分析模型 KNN CNN卷积神经 线性回归 协同过滤算法 用户 物品 MLP神经网络 SVD深度学习模型 echarts python
  • CRM IFD部署更换证书 - adfs证书更换

    更换证书 导入证书 更换IIS证书 更换ADFS证书 设置服务通信证书 添加令牌签名证书和令牌解密证书 更新证书指纹 更新配置 更新CRM配置 更新ADFS信赖方元数据 好家伙 证书又到期了 前面写了CRM网站的证书的更换比较简单 这次呢大
  • 【Transformer】20、SOFT: Softmax-free Transformer with Linear Complexity

    文章目录 一 背景 二 方法 2 1 Softmax free self attention formulation 2 2 通过矩阵分解来实现低秩规范化 三 效果 本文收录于 NeurIPS 2021 论文链接 https arxiv o
  • 使用spring mvc内部集成的jackson将对象转成json格式字符串

    如果是spring boot pom xml里面已经导入了下面这个mvc环境起步依赖也可以用 下面是例子
  • 深度学习入门之如何制作npz、npy文件

    一 需求 论文 EyeTracking for everyone 中提出了iTracker神经网络 并构建了一个叫GazeCapture的数据库 将其部分数据集下载后 可以看到文件的层次结构如下图所示 其中 整个数据集的后缀名是npz 内部
  • 暑假补卷5——进程信号

    信号入门 板书 1 生活角度的信号 你在网上买了很多件商品 再等待不同商品快递的到来 但即便快递没有到来 你也知道快递来临时 你该怎么处理快递 也就是你能 识别快递 当快递员到了你楼下 你也收到快递到来的通知 但是你正在打游戏 需5min之
  • Unity3D学习(5)之工厂回收利用的3D版飞碟游戏

    这一次我们来做的任务是3D版鼠标点击鼠标的游戏 我们先来看一下游戏需求 案例研究 鼠标打飞碟 游戏设计 游戏需求 1 分多个 round 飞碟数量每个 round 都是 n 个 2 每个 round 的飞碟的色彩 大小 发射位置 速度 角度
  • 迅雷2018校园招聘-数字组合问题

    题目 给定整数n 取若干个1到n的整数可求和等于整数m 编程求出所有组合的个数 比如当n 6 m 8时 有四种组合 2 6 3 5 1 2 5 1 3 4 限定n和m小于120 思路 首先 这道题想要通过暴力搜索是无法实现的 那么只能找规律
  • Qt解决Linux/ARM下QSound无法播放的问题

    Qt解决Linux ARM下QSound无法播放的问题 Qt在Linux ARM环境下使用QSound播放音频时 有时会遇到音频无法播放的问题 这有可能是音频文件与Qt不兼容的问题 QSound只能播放 wav格式的音频 无法播放诸如 mp
  • IMAGE REGISTRATION

    Classification Nature area based and feature based Different viewpoints multiview analysis image from different viewpoin
  • registry:NoSuchMethodError zookeeper.server.quorum.flexible.QuorumMaj

    文章目录 1 美图 2 背景 3 问题分析 4 解决方案 1 美图 2 背景 我设置一个已有的registry升级为zk下的ha 但是报错 java lang NoSuchMethodError org apache zookeeper s
  • template之模板注意事项

    前言 在分析STL之前 我们需要先对template做一个回忆 可能我总结的内容你都会了 也可能你没有了印象了 但是我还是希望你先浏览一下template的用法 毕竟STL全部都涉及到了模板 而template是学习STL的基础 templ
  • Stable Diffusion服务环境搭建(远程服务版)

    Stable Diffusion服务环境搭建 远程服务版 Stable Diffusion是什么 Stable diffusion是一个基于Latent Diffusion Models 潜在扩散模型 LDMs 的文图生成 text to
  • 微信小程序:图标的使用(icon)

    摘要 图标主要是用来辅助ui界面的 常用的是 和 像蓝牙和wifi是否连上的标志 让人直观明了 icon的参数 组件icon的参数主要有三个 下图所示 1 type icon的类型 官方给出了9个 分别为success success no
  • 51单片机AD转换代码原理图参考

    include reg52 h define uchar unsigned char define uint unsigned int sbit ADC RD P3 3 sbit ADC WR P3 4 sbit ADC INT P3 5
  • 设计模式——简单工厂模式

    静态工厂方法模式 通过专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 模式中包含的角色及其职责 1 工厂 Creator 角色 简单工厂模式的核心 它负责实现创建所有实例的内部逻辑 工厂类可以被外界直接调用 创建所需