【设计模式】常用的设计模式详解

devtools/2025/3/29 17:38:05/

常用设计模式

常用设计模式介绍

设计模式的分类

创建型模式(Creational):关注对象的实例化过程,包括了如何实例化对象、隐藏对象的创建细节等。常见的创建型模式有单例模式、工厂模式、抽象工厂模式等。
结构型模式(Structural):关注对象之间的组合方式,以达到构建更大结构的目标。这些模式帮助你定义对象之间的关系,从而实现更大的结构。常见的结构型模式有适配器模式、装饰器模式、代理模式等。
行为型模式(Behavioral):关注对象之间的通信方式,以及如何合作共同完成任务。这些模式涉及到对象之间的交互、责任分配等。常见的行为型模式有观察者模式、策略模式、命令模式等。

工厂模式

工厂模式

1.场景介绍

设计一个运算方法,可以运算两个数的加减乘除等运算
思维:页面与业务分离开,加减乘除独立,方便后续有其他算法加入时不受影响

案例代码

1.运算类

java">package org.example.model.factory;public class Compute {private int numA;private int numB;public int getNumA() {return numA;}public void setNumA(int numA) {this.numA = numA;}public int getNumB() {return numB;}public void setNumB(int numB) {this.numB = numB;}public int getResult(int numA,int numB){return 0;}
}

2.加法类

java">package org.example.model.factory;public class OperaAdd extends Compute{@Overridepublic int getResult(int numA,int numB) {return numA + numB;}
}

3.减法类

java">package org.example.model.factory;public class OperaReduce extends Compute{@Overridepublic int getResult(int numA,int numB) {return numA - numB;}
}

4.乘法类

java">package org.example.model.factory;public class OperaMul extends Compute{@Overridepublic int getResult(int numA,int numB) {return numA * numB;}
}

5.除法类

java">package org.example.model.factory;public class OperaDiv extends Compute{@Overridepublic int getResult(int numA,int numB) {if (numB != 0){return numA / numB;}else {throw new RuntimeException("除数不能为0");}}
}

6.工厂类

java">package org.example.model.factory;public class OperaFactory {public static Compute createCompute(String opera){Compute c = null;switch (opera){case "+":c = new OperaAdd();break;case "-":c = new OperaReduce();break;case "*":c = new OperaMul();break;case "/":c = new OperaDiv();break;}return c;}
}

7.测试

java">package org.example.model.factory;public class TestDemo {public static void main(String[] args) {Compute c = OperaFactory.createCompute("+");int result = c.getResult(3,8);System.out.println(result);}
}

8.输出结果
在这里插入图片描述

参考链接

参考书籍:《大话设计模式
参考博客:
Java开发者必备:23种设计模式全面解析
23种设计模式(Java版,超详细!)


http://www.ppmy.cn/devtools/170654.html

相关文章

C++ 核心编程 ——4.9 文件操作

4.9.0 概述 程序运行时产生的数据都属于临时数据&#xff0c;一旦运行结束都被释放&#xff0c;通过文件可以将数据持久化 C中对文件操作需要包含文件流的头文件 < fstream > 文件类型文本文件文件以文本的ASCII码&#xff08;每个字符都有对应的编码&#xff09;形式存…

【Linux】从互斥原理到C++ RAII封装实践

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

C语言每日一练——day_12(最后一天)

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第十二天。&#xff08;最后一天&#xff0c;完结散花啦&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff0…

Ubuntu实时读取音乐软件的音频流

文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的&#xff0c;我需要在Ubuntu中&#xff0c;实时读取正在播放音乐的音频流&#xff0c;然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现&#xff0c;好处是可以直接利用Helvum…

如果没有负载均衡,普通路由器怎么实现叠加两条宽带的带宽?

正文共&#xff1a;1804 字 6 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上篇文章中&#xff08;一条100M宽带 一条200M宽带 300M&#xff0c;怎么就有人不信呢&#xff1f;&#xff09;&#xff0c;我们介绍了如何利用设备的负载均衡功能将两条出口链路的带宽进行叠加&…

python工具-pipreqs 自动化生成requirements.txt文件

pip freeze 的问题 在开发 Python 项目时&#xff0c;requirements.txt 文件扮演着至关重要的角色&#xff0c;它记录了项目所需的所有外部库及其版本。传统上&#xff0c;我们使用 pip freeze 命令来生成这个文件&#xff0c;但它存在一些弊端&#xff1a;• 只记录已安装的库…

前沿科技一览未来发展趋势

物联网改变生活。智能家居是其中一大亮点。家里各种设备能联网工作 这叫智能化。比如灯开关能自动亮 想吃火锅电饭煲就提前热好。 要让家居设备变智能 需要几步&#xff1f;首先得给它们装上芯片。接着让它们连上网。这样就能远程操控了。手机点一下 就能让空调开到25度。还有…

二项式分布(Binomial Distribution)

二项式分布&#xff08;Binomial Distribution&#xff09; 定义 让我们来看看玩板球这个例子。假设你今天赢了一场比赛&#xff0c;这表示一个成功的事件。你再比了一场&#xff0c;但你输了。如果你今天赢了一场比赛&#xff0c;但这并不表示你明天肯定会赢。我们来分配一个…