大话模式学习笔记(简单工厂模式、策略模式、单一职责)

news2024/11/20 9:35:42

最近在看《大话设计模式》,做一点总结总结吧。

之前也进行学习过设计模式,但是都是讲该设计模式是什么,包含哪些元素,再配合一点简单的demo,理解很不深刻。最近又重新学一下。

简单工厂模式

在这本书中由案例写一个计算器引入,按照我们的思维就是根据题意写出对应的需求,但是对于后面的维护这些考虑的就很少了,顶多把计算的过程封装成一个函数(这是我目前思维),后面大鸟开始说我如果开始增加计算功能呢?例如增加计算一个数的平方根,你还要去修改原来计算的代码,增加对应的操作。那每次变化都要对该类进行修改。这个时候就引入了简单工厂模式。

创建一个抽象类为父类,里面包含变量有num1,computation,num2,方法getResult()。

子类:加法类、减法类、乘类、除类、开方类。

如果再想增加计算操作,直接创建对应的子类即可。

感觉就是将抽象类父类是一个生产工厂,可以创建功能类似的各个类,每个类内部去进行具体的操作

策略模式

在本书中由案例写一个商场计算商品金额的系统引入,我很自然想的很简单,那就是商品总数*商品单价,之后再进行累加操作。(写在一个类中,在封装一个计算商品金额方法就行了)

大鸟后面说那现在商场进行活动促销,满300-100呢?

那我想的就是在计算商品金额的方法多加一个参数,计算的时候判断一下是正常计算还是进行满减计算,返回最终用户应该支付的金额。

大鸟后面说如果商场进行8折活动呢?以后可能还会有7、6折等活动?

如果这样的话我每次都要去修改计算商品金额的方法。

但是这时突然想起了开放封闭原则,在需求增加时只需要向系统中加入新的功能实现类,而原有的一切保持封闭不变的状态,这就是基于抽象机制而实现的开放封闭式设计。
在这里插入图片描述
在本书中,使用简单工厂+策略模式相结合: 创建了一个类A,类A里面定义父类变量B,并且根据输入的活动类型进行选择合适的子类(正常收费、打折收费、返利收费)进行运算。
在这里插入图片描述

策略模式是用来封装算法的,用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以使用侧罗模式来处理这种变化的可能性

单一职责原则

就一类而言,应该仅有一个引起它变化的原因。

软件设计真正要做的内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的冬季去改变一个类,那么这个类就是具体有多一个的职责,这个时候就应该考虑类的职责分离。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】AVL树和红黑树(插入和测试详解)

文章目录1、AVL树1.1 AVL树的插入1.2 总结与测试AVL树2、红黑树2.1 红黑树的插入2.2 红黑树的测试了解AVL树是为了了解红黑树,了解红黑树是为了更好的理解set和map。 1、AVL树 AVL树是在二叉搜索树的基础上进行了严格的平衡,能做到平衡的关键是通过平衡…

【LVGL笔记】-- 贝塞尔曲线绘制

什么是贝塞尔曲线 贝塞尔曲线(Bzier Curve,也被称为贝塞尔多项式(Bzier Polynomial),是由一系列控制点(Control Point)所定义的一条平滑曲线。Pierre Bzier于1960年开始利用该曲线设计雷诺的车…

静态代码审计插件 snyk 使用教程

目录 1、vscode 插件安装 2、手动生成 token 3、自动分析 1、vscode 插件安装 2、手动生成 token 点击登录链接:

网站如何锁定用户,超级浏览器有办法解决吗?

随着全球开放,跨境电商人纷纷开启了2023年的搞钱之旅,很多期待着在新的一年大干一场。但前事不忘后事之师,2022年跨境生意全面沦陷,其实除了大环境的因素之外,还有一个很重要的原因是,各个平台都开始实行非…

自己实现strcpy和strlen函数

大家可能会遇到这样的题目,不使用C语言库函数来实现拷贝字符串和求字符串长度的功能。本文就是来详细地说明如何模拟实现这两个函数的功能。 strcpy部分 函数的参数形式char* strcpy(char*destination,const char*source); 该参数说明了strcpy返回类型…

雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万?

转自:雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万? (baidu.com)在公元前3000年至1000年的广大时间内,是世界四大文明古国大放光彩的时候,古印度文明、古巴比伦文明、古埃及文明以及我们的古华夏,…

如何入侵服务器

根据中华人民共和国刑法: 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的&#xff…

荧光染料Cyanine5 carboxylic acid,1032678-07-1,花青素Cy5-羧酸

Cyanine5 carboxylic acid,Cy5 COOH,Cyanine5 COOH| 花青素Cy5-羧酸,花青素Cyanine5羧酸 | CAS:1032678-07-1 | 纯度:95%试剂信息:CAS:1032678-07-1外观:深蓝粉末分子量:…

LeetCode 周赛 332,在套路里摸爬滚打~

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,今天是 3T 选手小彭。 上周是 LeetCode 第 332 场周赛,你参加了吗?算法解题思维需要长时间锻炼,加入我们一起刷题吧~ 小…

2023,再转行去做软件测试还有前途吗?

近年来,以云计算、移动互联网、物联网、工业互联网、人工智能、大数据及区块链等新一代信息技术构建的智能化应用和产品出现爆发式增长,突破了传统对于软件形态的认知,软件形态正以各种展现方式诠释着对新型智能软件的定义。这也使得软件的质…

Java提供了哪些IO方式? NIO如何实现多路复用?

第11讲 | Java提供了哪些IO方式? NIO如何实现多路复用? IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某…

项目管理工具dhtmlxGantt甘特图入门教程(十):服务器端数据集成(上)

这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun:764148812&#…

考前梳理:PMP®备考之敏捷实践中的五大事件

今天为大家总结了PMP敏捷实践中的五大事件,帮助大家回顾考试重点,大家可以看着下方敏捷实践流程图进行个人构思,后文也会为大家一一剖析其中的重要环节。完整的Scrum敏捷实践框架流程图:一、冲刺计划会议 Sprint Planning1.为即将…

SQP求解器推导与matlab命令(JacobianHessian矩阵)

缩写: SQP(Sequential Quadratic Programming)序列二次规划 NLP 非线性规划问题 matlab代码 matlab中求解器 SQP的认识 《最优化方法及其Matlab程序设计》 书 马昌凤 SQP 知乎 基础知识点 I.Jacobian矩阵 Def: 一阶偏导 II.Hessian矩阵 Def: 二阶偏导 图 三阶…

【SpringCloud+Vue】生成微信二维码及扫码登录--OAuth2

OAuth2 微信登录流程 前端代码实现 后端代码实现 导入依赖 yml 实体类以及返回结果 工具类 微信配置信息 HTTP客户端连接池 JWT 控制层 业务层 持久层 OAuth2 OAuth2是OAuth(Open Authorization,开放授权)协议的延续版本。用来授…

Hinge Loss 和 Zero-One Loss

文章目录Hinge Loss 和 Zero-One LossHinge LossZero-One LossHinge Loss 和 Zero-One Loss 维基百科:https://en.wikipedia.org/wiki/Hinge_loss 图表说明: 纵轴表示固定 t1t1t1 的 Hinge loss(蓝色)和 Zero-One Loss&#xff…

字节5年测试经验,12月无情被辞,划水的兄弟别再这样了····

前言 先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成…

实现一个小程序分享图 wxml2canvas

我们经常会遇上动态生成海报的需求,而在小程序中,生成图片非Canvas莫属。但是在实际工作当中,为了追求效率,我们会不可避免地去使用一些JS插件,而 wxml-to-canvas 就是一款官方推荐且非常优秀的插件,它可以…

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…

I2C总线应用测试程序

参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…