设计模式--总结和对比

设计模式原则

设计原则一句话归纳目的

开闭原则(OCP)

(Open-Close)

对扩展开放,对修改关闭减少维护带来新的风险

依赖倒置原则(DIP)

(Dependence Inversion)

高层不应该依赖底层更利于代码结构的升级 扩展

单一职责原则(SRP)

(Simple Responsibility)

一个类只干一件事便于理解,提高代码可读性

接口隔离原则(ISP)

(Interface Segregation)

一个接口只干一件事功能解耦,高聚合,低耦合

迪米特法则(LoD)

(Law of Demeter)

不该知道的不要知道只和朋友交流,不和陌生人说话,减少代码臃肿

里氏原则(LSP)

(Liskov Substitution)

子类重写方法功能发生改变,

不应该影响父类方法的含义

防止继承泛滥

合成复用原则(CARP)

(Composite/Aggregate Reuse)

尽量使用组合实现代码复用,而不使用继承降低代码耦合

GOF 23种设计模式

分类设计模式
创建型工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、单例模式(Singleton)、原型模式(Prototype)、建造者模式(Builder)
结构型代理模式(Proxy)、门面模式(Facade)、装饰者模式(Decorator)、享元模式(Flyweight)、组合模式(Composite)、适配器模式(Adaoter)、桥接模式(Bridge)
行为型

模板方法模式(Template Method)、策略模式(Strategy)、责任链模式(Chain of Responsibility)、迭代器模式(Iterator)、命令模式(Command)、状态模式(state)、备忘录模式(Memento)、中介者模式(Mediator)、解释器模式(Interpreter)、观察者模式(Observer)、访问者模式(Visitor)

各设计模式总结

设计模式目的框架源码
工厂方法模式(Factory Method)封装创建细节LoggerFactory、Calender
单例模式(Singleton)保证独一无二BeanFactory、Runtime
原型模式(Prototype)高效创建对象ArrayList、PrototypeBean
建造者模式(Builder)开放个性配置步骤StringBuilder、BeanDefinitionBuilder
代理模式(Proxy)增强职责ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy
门面模式(Facade)统一访问入口JdbcUtils、RequestFacade
装饰者模式(Decorator)灵活扩展,同宗同源BufferedReader、InputStream
享元模式(Flyweight)共享资源池String、Integer、ObjectPool
组合模式(Composite)统一整体和个体HashMap、SqlNode
适配器模式(Adaoter)兼容转换AdvisorAdapter、HandlerAdapter
桥接模式(Bridge)不允许继承DriverManager
委派模式(Delegate)只对结果负责ClassLoader、BeanDefinitionParserDelegate
模板方法模式(Template Method)逻辑复用JdbcTemplate、HttpServlet
策略模式(Strategy)把选择权交给用户Comparator、InstantiationStrategy
责任链模式(Chain of Responsibility)解耦处理逻辑FilterChain、Pipeline
迭代器模式(Iterator)统一对集合的访问方式Iterator
命令模式(Command)解耦请求和处理Runnable、TestCase
状态模式(state)绑定状态和行为Lifecycle
备忘录模式(Memento)备份StateManageableMessageContext
中介者模式(Mediator)统一管理网状资源Timer
解释器模式(Interpreter)实现特定语法解析Pattern、ExpressionParser
观察者模式(Observer)解耦观察者与被观察者ContextLoaderListener
访问者模式(Visitor)解耦数据结构和数据操作FileVisitor、BeanDefinitionVisitor

设计模式之间的关联关系和对比

  • 单例模式和工厂模式

实际业务代码中,通常会把工厂类设计为单例。

  • 策略模式和工厂模式

工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。

工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。

  • 策暗模式和委派模式

策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。

委派模式更关注分发和调度的过程。

  • 模板方法模式和工厂方法模式

工厂方法是模板方法的一种特殊实现。

  • 模板方法模式和策暗模式

模板方法和策略模式都有封装算法。

策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。

模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。

模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替if. else..等条件分支语句。

  • 装饰者模式和静态代理模式

装饰者模式关注点在于给对象动态添力口方法,而代理更加注重控制对对象的访问。

代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。

  • 装饰者模式和适配器模式

装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。

装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者
可以实现不同的接口。

  • 适配器模式和静态代理模式

适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。

  • 适配器模式和策暗模式

在适配业务复杂的情况下,利用策略模式优化动态适配逻辑。

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

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

相关文章

我的NPI项目之Android Camera (四)-- 对应Camera tuning的一些理解

Camera作为产品的一个核心部件,在产品竞争力方面有着不容争辩的地位。所以,选择一款合适的Camera模组并发挥出模组的性能对项目极其重要。 在Camera的选型方面,我不用多说,国内前五的有:舜宇,丘钛&#xff…

消息中间件相关介绍

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ&am…

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据,包括地标(Landmark)、特征点(Feature Point)、平面(Plane)等,以及使用者的操作信息,如使用者添加的 ARAnchor …

数据采集设备:安装过程的要点与注意事项

在当今的数据驱动世界,数据采集设备在各行各业中发挥着至关重要的作用。从工业生产到环境监测,再到医疗诊断,数据采集设备为我们提供了大量有价值的信息。然而,要想充分发挥这些设备的潜力,首先需要确保它们被正确地安…

黑马程序员——接口测试——day03

目录: Potman断言 Postman断言简介Postman常用断言 断言响应状态码断言包含某字符串断言JSON数据Postman断言工作原理Postman关联 简介实现步骤核心代码创建环境案例1案例2Postman参数化 简介数据文件简介编写数据文件 CSV文件JSON文件导入数据文件到postman读取数…

杂题——亲密数

题目描述 两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 输入格式 无 输出格式 3000以内…

【AHK】68键键盘键位布局优化/esc改退格键/回车键

本人习惯使用~作为退格键,但是由于keychron 68键的布局只能用esc平替~来修改,然后也将回车键通过alt和大小写锁定键一起触发 esc::bs ;次步骤与下面步骤相对应,如果是用send bs方式则下面的不生效^esc:: ;通过建立 保留esc功能 send {esc} re…

啊丢的刷题记录手册(洛谷题单排序篇)

1.洛谷题P1923 求第k小的数 题目描述 输入 n&#xff08;1≤n<5000000 且 n 为奇数&#xff09;个数字ai​&#xff08;1≤ai​<109&#xff09;&#xff0c;输出这些数字的第 k 小的数。最小的数是第 0 小。 请尽量不要使用 nth_element 来写本题&#xff0c;因为本题…

换档控制支架的尺寸优化

前言 本示例使用优化模块&#xff0c;通过在保持原始重量的同时改变壳体厚度&#xff0c;使冲压钣金支架中的应变能之和最小化&#xff08;使刚度最大化&#xff09;。 本页讨论 前言应用描述Abaqus建模方法和仿真技术文件参考 应用描述 本示例说明了汽车变速箱连杆中使用的…

亿道丨三防平板pad丨三防平板是指哪三防丨三防工业级平板电脑

三防工业级平板电脑成为许多行业中的重要工具。本文将介绍三防工业级平板电脑的特点以及其在各个领域中的广泛应用。 三防工业级平板电脑的特点 三防工业级平板电脑是指具备防水、防尘和防震功能的平板电脑。这些特点使得它们能够在恶劣环境中工作&#xff0c;如沙尘飞扬的工地…

sockaddr结构体、sockaddr_in结构体和gethostbyname函数

sockaddr结构体 sockaddr结构体是在网络编程中经常使用的一个数据结构&#xff0c;用来表示套接字地址。它是一个通用的地址结构&#xff0c;可以用于不同的协议&#xff08;如IPv4、IPv6、UNIX等&#xff09;。 在C语言中&#xff0c;sockaddr结构体定义如下&#xff1a; s…

交换两个整数

交换两个整数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 写⼀个函数Swap&#xff0c;可以交换两个整数的内容。注意必须实现成函数完成。 输入2个整数&#xff0c;调用自定义函数Swap&#xff0c;完成2个整数的…

C++面试 -操作系统-代码能力:用户态和内核态的基本概念、区别

目录 一、基本概念 概念&#xff1a; 区别&#xff1a; 二、Windows示例 基础介绍 用户态到内核态的切换过程&#xff1a; 程序实例 三、Linux示例 特权级别&#xff1a; 用户态到内核态的切换过程&#xff1a; 调度和中断处理&#xff1a; 程序实例 总结 在操作系…

Java多线程面试题(三)

Java多线程面试题&#xff08;三&#xff09; 前言1、Thread 类中的 yield 方法有什么作用&#xff1f;2、Java 线程池中 submit() 和 execute()方法有什么区别&#xff1f;3、Java 中的 ReadWriteLock 是什么&#xff1f;4、可以直接调用 Thread 类的 run ()方法么&#xff1f…

【升级JDK21】遇到:服务配置文件不正确, 或构造处理程序对象

RROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile(default-compile) on project tr-public-opinion-collector-start: Compilation failure [ERROR] 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor:…

【HarmonyOS】鸿蒙开发之Stage模型-基本概念——第4.1章

Stage模型-基本概念 名词解释 AbilityStage:应用组件的“舞台“ UIAbility:包含UI界面的应用组件&#xff0c;是系统调度的基本单元 WindowStage:组件内窗口的“舞台“ Window&#xff1a;用来绘制UI页面的窗口 HAP:Harmony Ability Package(鸿蒙能力类型的包) HSP:Harmony Sh…

C++17之折叠表达式

相关文章系列 深入理解可变参数(va_list、std::initializer_list和可变参数模版) 目录 1.介绍 2.应用 2.1.使用折叠表达式 2.2.支持的运算符 2.3.使用折叠处理类型 3.总结 1.介绍 折叠表达式是C17新引进的语法特性。使用折叠表达式可以简化对C11中引入的参数包的处理&…

合泰杯开发板HT66F2390入门教程(点亮LED灯)——获得成就:点灯大师

前言 前不久报名了合泰杯竞赛项目&#xff0c;然后手上也是有一个HT66F2390的开发板&#xff0c;我就打算先从点灯开始&#xff0c;学习一个新的芯片第一步都是先成为点灯大师。 一开始&#xff0c;我在网上搜寻了许多的代码示例&#xff0c;希望能够顺利实现LED的控制。然而&…

LeetCode第七题: 整数反转

题目描述 给你一个 32 位的有符号整数 x​ &#xff0c;返回将 x​ 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1]​ &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 …

软考笔记--企业资源规划和实施

企业资源是指企业业务活动和战略运营的事物&#xff0c;包括人、财和物&#xff0c;也包括信息资源&#xff0c;同时也包括企业的内部和外部资源。企业资源可以归纳为物流&#xff0c;资金流和信息流。企业资源规划&#xff08;ERP&#xff09;是只建立在信息技术基础上&#x…