设计模式分享

2. 策略模式

2.1 定义:策略模式定义了家族算法,分别封装起来(这些算法完成的都是相同的工作,只是实现不同),它可以用相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。此模式让算法的变化不会影响到其他算法的用户

2.2 策略模式结构图

在这里插入图片描述

2.3 策列模式的优点:

2.3.1 策略模式的Strategy类层次为Context定义了一系列的可供重用的的算法或行为,继承有利于析取出这些算法中的公共功能。
2.3.2 简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试

2.4 使用场景:当分析过程中,听到不同时间应用不同的业务规则,就可以考虑用策略模式处理这种变化的可能性。但是使用策略模式,没有减少给客户端判断业务规则类型的压力,使用工厂+策略模式可以缓解压力

3. 单一职责原则

3.1 定义:就一个类而言,应该仅有一个引起它变化的原因

3.2 原因:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化,可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受意想不到的变化。

4. 开放封闭原则

4.1 定义:软件实体(类,模块,函数等等)应该可以扩展,但是不可修改

4.2 特征:对扩展开放,对更改关闭。 (面对需求,对程序的改动时通过新增代码实现,而不是修改原有的代码)

4.3 案例结构图

在这里插入图片描述

5. 依赖倒置原则(依赖倒转原则)

5.1 定义:高层模块不应该依赖低层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。(简单来说,就是面向接口编程)

在这里插入图片描述

6. 里氏替换原则

6.1 定义:子类型必须可以替换掉他们的父类型

7. 装饰模式

7.1 定义:动态的给一个对象添加额外一些的职责,就增加功能来说,装饰模式比生成子类更为灵活。

在这里插入图片描述

8. 代理模式

8.1 定义:为其他对象提供一种代理,以控制对这个对象的访问

在这里插入图片描述

8.2 应用:

8.2.1 远程代理:为一个对象在不同的地址空间提供局部代理,这样可以隐藏一个对象存在于不同空间的事实
8.2.2 虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
8.2.3 安全代理:用来控制真实对象访问时的权限
8.2.4 智能指引:是指当调用真实对象时,代理处理另外一些事

9. 原型模型

9.1 定义:用原型实例指定创建对象的实例,并通过拷贝这些原型创建新的对象。

在这里插入图片描述

10. 模板模型

10.1 定义:定义一个操作中算法的骨架,而将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。

在这里插入图片描述

11 迪米特法则(最少知识原则)

11.1 定义:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三方转发这个调用。

12 外观模式

12.1 为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

在这里插入图片描述

13 建造者模式

13.1 定义:将一个复杂对象的构建跟它的表示分离,使得同样的构建过程可以创建不同的表示。

在这里插入图片描述

14 观察者模式(发布-订阅模式)

14.1 定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以自动更新自己

在这里插入图片描述

15 抽象工厂

15.1 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的实现类。

在这里插入图片描述

16 状态模式

16.1 定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类

在这里插入图片描述

16.2 使用场景:当一个对象的行为取决于它的状态,并且必须在运行时刻根据状态改变它的行为时

17 适配器模式

17.1 定义:将一个类的接口转化为客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起使用的类可以一起使用

在这里插入图片描述

18 备忘录模式

18.1 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象还原成之前的状态

在这里插入图片描述

19 组合模式

19.1 定义:将对象组合成树形结构以表示 部分与整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

在这里插入图片描述

19.2 透明方式:叶节点和枝节点具有完全一致的接口行为(叶节点也具有添加和删除子节点的方法),对于外界没有区别
19.2 安全方式:叶节点没有删除和添加子节点的方法。叶节点和枝节点接口不一致,外界调用需要做判断
19.3 使用场景:需要体现整体与部分层次结构的时候,以及你希望用户忽略组合和单个对象的的不同,统一的使用组合结构中所有的对象时。

20 迭代器模式

20.1 定义:使用一种方案顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示

在这里插入图片描述

21 单例模式

21.1 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点

在这里插入图片描述

21.2 应用:考虑并发的情况,饿汉模式创建对象,使用双重锁定

在这里插入图片描述

22 合成/聚合复用原则

22.1 定义:尽量使用合成/聚合,尽量不要使用类继承

23 桥接模式

23.1 定义:将抽象部分和它的实现部分 分离,使它们都可以独立的变化

24 命令模式

24.1 定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

25 职责链模式

25.1 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

在这里插入图片描述

26 中介者模式

26.1 定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

huggingface笔记:使用accelerate加速

1 介绍 随着模型规模的增大,并行处理已成为在有限硬件上训练大型模型和提高训练速度的重要策略。Hugging Face 创建了Accelerate库,帮助用户在任何类型的分布式环境中轻松训练Transformers模型,无论是单机多GPU还是跨多机的多GPU 2 创建Acce…

微信公众号自定义分销商城小程序源码系统 带完整的安装代码吧以及系统部署搭建教程

系统概述 微信公众号自定义分销商城小程序源码系统是一款功能强大的电商解决方案,它集成了商品管理、订单处理、支付接口、分销管理等多种功能。该系统支持自定义界面设计,商家可根据自身需求调整商城的页面布局和风格,打造独特的品牌形象。…

多客开源】游戏陪玩系统,游戏陪玩源码,游戏陪玩语音社交源码运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

介绍 我们针对陪玩app源码市场的发展趋势,整合市面上主流陪玩app应用功能,自主开发了多客陪玩系统源码,并可为客户提供全部原生陪玩源码,进行二次开发,打造适用于线上游戏陪玩、语音聊天、心理咨询、情感陪伴等业务场…

玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(案例实战)

** 玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(案例实战) ** 目录 玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&…

RockTree Capital石木资本品牌升级 沉浸式“加密朋克风”网站震撼上线

总部位于北京的领先的Web3 原生加密基金与投资机构 RockTree Capital 石木资本,宣布推出全新沉浸式网站,在其中呈现一个未来主义电影风格概念:赛博朋克加密城市。这个前沿互动型城市景观代表着 RockTree Capital 对 Web3 普及以及技术、金融与…

AI预测体彩排3采取878定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月16日预测第2弹

昨天的87823大底测试第一次测试,已经成功命中! 今天继续测试,仍旧目标为:10期中至少5中期。好了,废话不多说了,直接上结果吧~ 首先,878定位如下: 百位:4,5,6,3,8,1,9,0…

【Unity Shader入门精要 第7章】基础纹理(三)

1. 渐变纹理 另外一种对于纹理的使用方式是通过渐变纹理为物体提供漫反射光照效果。 顾名思义,渐变纹理本身就是一张颜色渐变(可以是连续渐变,也可能是突变)的图片,这个渐变的过程模拟的就是光源从不同的角度照射物体…

Python代码:七、小数化整数

1、题目 日常生活中我们会遇到很多小数,但是有的人不喜欢小数,因此会用四舍五入的方式将其去掉。在Python中我们更加简单,可以利用强制类型转换将小数转变成整数,请你试一试。 2、代码 import sysn float(input()) print(int(…

JUnit5超时处理

测试过程中如果某条测试用例执行过程中阻塞,就会发生超时问题: 阻塞其他用例的执行对于某些用例,如果用例执行时间过长,那么本身就是bug 使用场景: 使用JUnit5自带的超时处理,当测试用例执行时间超过执行…

mybatis-plus-ui代码生成器

mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 使用方法 引入mave…

邮箱API发信有哪些限制?如何设置API接口?

腾讯云邮箱API与AokSend相比,有哪些优势和特性差异? 使用邮箱API发信并非毫无限制,如何正确设置API接口并选择合适的服务商,成为企业关注的焦点。接下来,Aok将探讨邮箱API发信的限制、API接口的设置方法,以…

图文并茂:解析Spring Boot Controller返回图片的三种方式

欢迎来到我的博客,代码的世界里,每一行都是一个故事 图文并茂:解析Spring Boot Controller返回图片的三种方式 前言使用Base64编码返回图片使用byte数组返回图片使用Resource对象返回图片图片格式转换与性能对比 前言 在互联网的世界里&…

LiveGBS流媒体平台GB/T28181用户手册-国标设备:设备列表、通道列表、流传输模式修改、查看通道播放、设备录像、在线状态、流量统计

LiveGBS流媒体平台GB/T28181用户手册-国标设备:设备列表、通道列表、流传输模式修改、查看通道播放、设备录像、在线状态、流量统计 1、国标设备1.1、设备列表1.1.1、查看通道1.1.2、更新通道1.1.3、编辑1.1.3、导入导出1.1.4、条件检索1.1.5、设备状态记录1.1.6、设备流量统计…

太平洋产险海南分公司提醒您:高温来袭!新能源车该如何正确充电?

据不完全统计 近三年来 7-8月一直是电动汽车烧车事故的高发期 毕竟夏季的高温影响着动力电池的状态新能源汽车为什么会自燃? 小保替你们找到了央视的官方回答! 原来 新能源汽车比传统燃油车多了一套电池系统 电解液为可燃物 当热量聚集达到燃点却没…

【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)

牛客对应题目链接:主持人调度(二)_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 把区间按照左端点排序,然后搞个堆: 先把第⼀个区间的右端点加⼊到堆中。遍历后⾯的区间,分情况讨论:&#xff…

双向链表结构

1.双向链表定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接前驱和直接后继。 2.实现双向链表 2.1创建双向链表类 /*** 基于双向链表实现元素存取的容器* param <E>*/ public class MyDoubleLinked…

设计模式六大原则之依赖倒置原则

文章目录 概念逻辑关系 小结 概念 依赖倒置原则指在设计代码架构时&#xff0c;高层模块不应该依赖底层模块&#xff0c;二者都应该依赖抽象。抽象不应该依赖于细节&#xff0c;细节应该依赖于抽象。 逻辑关系 如上图所示&#xff0c;逻辑应该就是这样&#xff0c;高层依赖于…

企业微信网页应用开发(java版)

1、成为开发者 企业微信先认证企业,成为开发者,到开发者中心创建web应用 开发者中心 选择工具 2、创建一个web应用 填写web应用信息 填写配置开发信息 域名地址先填一样的,填好后创建应用 3、配置可信域名 点击检查可信域名归属 下载可信域名验证文件 将下好的文件放到…

[案例分享] 产品需求跨职能团队协作

跨职能团队协作不仅可以激发创新、提升生产力&#xff0c;还能促进业务目标的达成。

最新版★重大升级★神点云连锁餐饮V2独立版点餐系统★公众号/h5/小程序前后端全套源码

提醒&#xff1a; 市场上流通很多老版本代码&#xff0c;一大堆问题且无法保证售后的源码&#xff0c;请各位买家一定要睁大眼睛&#xff0c;以防上当受骗&#xff01;&#xff01;&#xff01;本系统源码全是经本人亲自测试与修复的完好版本&#xff0c;且本人用此版本源码已…