设计模式-简单工厂模式

文章目录

  • 简单工厂设计模式
    • 什么是简单工厂?
    • 为什么使用简单工厂
    • 工厂模式代码实现
    • 简单工厂优缺点优点:

简单工厂设计模式

学习视频

什么是简单工厂?

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

为什么使用简单工厂

  • 减少客户程序对类创建过程的依赖
  • 简单工厂实现步骤
    1.提供一个工厂类:负责实现创建所有实例的内部逻辑。可被外界直接调用,创建所需的产品对象。
    2.提供一个抽象产品类:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
    3.提供一个具体产品类:简单工厂模式所创建的具体实例对象
    在这里插入图片描述

工厂模式代码实现

#include<iostream>
using namespace std;/*
1.提供一个工厂类:产生不同产品
2.提供一个抽象产品类:运算符类+负责运算,得到结果
3.提供一个具体产品类:具体运算符
*/// 抽象类
class OperationBase {
public:/* 抽象类中通用的属性 */int m_num1;int m_num2;virtual int getAns() { return -1; }
};// 具体产品类
class AddOperation : public OperationBase {
public:int getAns() {return m_num1 + m_num2;}
};class SubOperation :public OperationBase {
public:int getAns() {return m_num1 - m_num2;}
};// 工厂类
class OperationFatory {
public:static OperationBase *getOperation(char ch);
};OperationBase *OperationFatory::getOperation(char ch) {switch (ch){case '+':return new AddOperation;case '-':return new SubOperation;default:break;}
}int main() {// 工厂类不需要实例化  父类指针接收子类对象OperationBase* addOper = OperationFatory::getOperation('+');addOper->m_num1 = 2;addOper->m_num2 = 3;cout << addOper->getAns() << endl;system("pause");return 0;
}

简单工厂优缺点优点:

优点

  • 帮助封装
    • 实现组件封装,面向接口编程
  • 解耦合
    • 客户端和具体实现类的解耦合

缺点:

  • 可能增加客户端的复杂度
  • 不方便扩展子工厂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21899.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中使用Pinia和Vuex详解

最具有争议的Pinia和Vuex那个更好&#xff1f; 我们使用Vue2的时候&#xff0c;Vuex作为一个状态管理工具在组件中使用方便了很多。Vue3推出后&#xff0c;虽然相对于Vue2很多东西都变了&#xff0c;但是核心的东西还是没有变的&#xff0c;比如说状态管理、路由等等。实际上&a…

Group, AnimationUpdate, Menu 的使用

1. Group 组堆栈布局的使用 1.1 实现 // 组堆栈 struct GroupBootcamp: View {var body: some View {VStack(spacing: 50) {Text("Hello, world!")Group() {Text("Hello, world!")Text("Hello, world!")}.font(.caption).foregroundColor(.gree…

智头条|第25届中国建博会(广州)成功举行,马斯克组建xAI公司

行业动态&#xff1a; 第25届中国建博会&#xff08;广州&#xff09;成功举行 7月8日至11日期间&#xff0c;2023中国建博会(广州)暨首届广州卫博会在广州如火如荼地进行。本届展会以“冠军企业首秀平台”为定位&#xff0c;以“建装理想家&#xff0c;服务新格局”为主题&a…

conda的使用

一、conda 1、为什么使用conda 在安装Python包的过程中&#xff0c;可能遇到依赖包的问题。例如&#xff0c;要安装numpy&#xff0c;需要先安装BLAS和LAPACK等库。在使用pip等包管理工具时&#xff0c;这些依赖包需要手动安装&#xff0c;操作起来可能比较繁琐。而conda是一个…

Redis的缓存问题

说起Redis的缓存&#xff0c;我们知道前端发出的请求到后端&#xff0c;后端先从Redis中查询&#xff0c;如果查询到了则直接返回&#xff0c;如果Redis中未查询到&#xff0c;就去数据库中查询&#xff0c;如果数据库中存在&#xff0c;则返回结果并且更新到Redis缓存当中&…

Redis_简介(1)

目录 Redis简介 Redis特性 Redis 优势 Redis应用场景 源码等资料获取方法 Redis简介 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。从2010年3月15日起&#xff0c;Redis的开发工作由…

leetcode 450. 删除二叉搜索树中的节点

2023.7.14 搜索二叉树相关的题一般都能用递归解决。 本体大致思路是&#xff1a;使用递归的方式&#xff0c;在树中查找目标节点&#xff0c;并根据节点的情况进行删除操作。如果目标节点是叶子节点&#xff0c;直接删除它&#xff1b;如果目标节点只有一个子树&#xff0c;将子…

mysql笔记

目录 1、root用户密码忘记 2、SQL的分类 2.1、DQL数据查询语言 前言 2.1.1、设置别名 2.1.2、去除重复行 2.1.3、空值参与运算 2.1.4、着重号 2.1.5、显示表结构 2.1.6、算数运算符 2.1.7、比较运算符 2.1.8、逻辑运算符 2.1.9、位运算符 2.1.10、 模糊查询 2.1.…

经典CNN(一):ResNet-50算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 ResNet理论 深度残差网络ResNet(deep residual network)在2015年由何凯明等提出&#xff0c;因为它简单与实用并存&#xff0c;随后很多研究…

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

Halcon与OpenCV:哪个更适合你的机器视觉应用?

Halcon和OpenCV是两个广泛使用的机器视觉库&#xff0c;各有优势和适用场景。下面是对它们的简要比较&#xff1a; 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 Halcon&#xff1a; Halcon是由MVTec Software GmbH开发的商业机器视觉库。它提供了广泛…

NLP Transformer的Decoder的输入输出都是什么?能解释一下每个部分都是什么?

要弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输入&#xff1a;我爱中国输出&#xff1a; I Love China 因为输入&#xff08;“我爱中国”&#xff09;在Encoder中进行了编码&#xff0c;这里我们具体讨论Decoder的…