01_23 种设计模式之《简单工厂模式》
文章目录
- 一、什么是设计模式
- 二、设计模式类型
- 简单工厂模式及应用场景
- 定义抽象产品类和具体产品类
- 实现工厂类
- 客户端代码
- 注意事项
一、什么是设计模式
设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,特定问题的解决方案,基于面向对象的设计原则:主要是对接口编程
而不是对实现编程、优先使用对象组合而不是继承
二、设计模式类型
23 种设计模式可分为三类:创建型模式、结构型模式、行为模式。
简单工厂模式、单例模式、抽象工厂模式、原型模式、建造者模式(5 种)。
代理模式、外观模式、享元模式、组合模式、装饰器模式、适配器模式、桥接模式(7 种)。
访问者模式、策略模式、模板模式、状态模式、备忘录模式、观察者模式、中介者模式、迭代器模式、解释器模式、责任链模式、命令模式(11 种)
简单工厂模式及应用场景
简单工厂模式主要解决接口选择问题。
Factory(工厂)的核心部分,负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象即可
。
定义抽象产品类和具体产品类
首先,定义一个抽象产品类
和几个具体产品类
。这些类将实现一个共同的接口。
// 抽象产品类
class Product {
public:virtual void use() = 0; // 纯虚函数virtual ~Product() {} // 虚析构函数,确保派生类对象能正确析构
};// 具体产品类A
class ConcreteProductA : public Product {
public:void use() override {std::cout << "Result of the product A" << std::endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void use() override {std::cout << "Result of the product B" << std::endl;}
};
实现工厂类
接下来,实现一个工厂类,它根据输入参数决定创建哪种产品对象。
// 工厂类
class SimpleFactory {
public:static Product* createProduct(const std::string& type) {if (type == "A") {return new ConcreteProductA();} else if (type == "B") {return new ConcreteProductB();}return nullptr;}
};
客户端代码
最后,编写客户端代码,使用工厂类创建产品对象。
#include <iostream>
#include <string>int main() {std::string type = "A"; // 假设客户端需要创建产品AProduct* product = SimpleFactory::createProduct(type);if (product != nullptr) {product->use();delete product; // 记得释放内存}type = "B"; // 现在客户端需要创建产品Bproduct = SimpleFactory::createProduct(type);if (product != nullptr) {product->use();delete product; // 记得释放内存}return 0;
}
注意事项
扩展性:如果产品类非常多,工厂类可能会变得复杂。在这种情况下,可以考虑使用工厂方法模式或抽象工厂模式。
相关文章:
01_23 种设计模式之《简单工厂模式》
文章目录 一、什么是设计模式二、设计模式类型简单工厂模式及应用场景定义抽象产品类和具体产品类实现工厂类客户端代码注意事项 一、什么是设计模式 设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,…...
Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一
1.前言 在12.0的系统rom定制化开发中,在关于定制动态日历图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…...

【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架
摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了小餐桌的标准化、制度化、程序化的管理,有效地防止了小餐桌的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修…...

C语言中的文件操作(二)
C语言中的文件操作(一)-CSDN博客https://blog.csdn.net/Xiaodao12345djs/article/details/142746010?spm1001.2014.3001.5501 四、文件的顺序读写 1、fputc (字符输出函数/写) 将一个字符写入文件中 #include <stdio.h>int main() {FILE* pf fo…...

【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
文章目录 C 继承详解:初阶理解与实战应用前言第一章:继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章:继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…...

Ubuntu 22.04 安装 KVM
首先检查是否支持 CPU 虚拟化,现在的 CPU 都应该支持,运行下面的命令,大于0 就是支持。 egrep -c (vmx|svm) /proc/cpuinfo安装 Libvirt apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-uti…...
101 公司战略的基本概念
公司战略的概念 传统概念(战略是终点途径):计划性、全局性、长期性现代概念(战略是途径):应变性、竞争性、风险性综合概念(前二者的折中):预先性、反应性公司的使命与目标…...
【devops】devops-ansible之剧本初出茅庐--搭建rsync和nfs
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》从问题中去学习k8s 《docker学习》暂未更…...
@RestController 和 @Controller 注解的联系及要点
1. RestController • RestController 是 Spring 4.0 引入的一个注解,它相当于 Controller ResponseBody组合注解。 主要作用:主要用于构建 RESTful Web 服务。标注 RestController 的类里的所有方法,返回的都是 JSON 或 XML 等格式的数据…...

机器学习篇-day03-线性回归-正规方程与梯度下降-模型评估-正则化解决模型拟合问题
一. 线性回归简介 定义 线性回归(Linear regression)是利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 回归方程(函数) 一元线性回归: y kx b > wx b k: 斜率, 在机器学习中叫 权重(weight), 简称: w b: 截距, 在机…...
图像人脸与视频人脸匹配度检测
import cv2 import dlib import numpy as np import os from pathlib import Path# 加载预训练模型 face_recognition_model "dlib_face_recognition_resnet_model_v1.dat" face_recognition_net dlib.face_recognition_model_v1(face_recognition_model)detector …...

【AI绘画】Midjourney进阶:对称构图详解
博客主页: [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯什么是构图为什么Midjourney要使用构图 💯对称构图特点使用场景提示词书写技巧测试 💯小结 💯前言 通常来学习AI绘画的人可以分为…...

道路积水检测数据集 1450张 路面积水 带分割 voc yolo
道路积水检测数据集 1450张 路面积水 带分割 voc yolo 分类名: (图片张数, 标注个数) puddle:(1468,1994) 总数:(1468,1994) 总类(nc): 1类 道路积水检测数据集介绍 项目名称 道路积水检测数据集 项目概述 本数据集包含1450张带有标注的图像&#x…...

上门安装维修系统小程序开发详解及源码示例
随着智能家居和设备的普及,消费者对上门安装和维修服务的需求日益增加。为了满足这一市场需求,开发一款上门安装维修系统小程序成为了一种有效的解决方案。本文将详细介绍上门安装维修系统小程序的开发过程,并提供一个简单的源码示例…...
03_23 种设计模式之《原型模式》
文章目录 一、原型模式基础知识原型模式的结构应用场景 实例拷贝构造函数被调用场景如下:典型的应用场景: 一、原型模式基础知识 原型模式是一种创建型设计模式,其功能为复制一个运行时的对象,包括对象各个成员当前的值。而代码又…...
【秋招笔试】10.08华为荣耀秋招(已改编)-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...

基于ResNet50模型的船型识别与分类系统研究
关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…...

一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)
背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…...

攻防世界(CTF)~Misc-Banmabanma
题目介绍 附件下载后得到一张图片类,似一只斑马,仔细观看发现像条形码 用条形码在线阅读查看一下 条形码在线识别 flag{TENSHINE}...

获取淘宝直播间弹幕数据的技术探索实践方法
在数字时代,直播已成为电商营销的重要渠道之一,而弹幕作为直播互动的核心元素,蕴含着丰富的用户行为和情感数据。本文将详细介绍如何获取淘宝直播间弹幕数据的技术方法和步骤,同时分析不同工具和方法的优缺点,并提供实…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...