设计模式23模式介绍

article/2025/11/6 12:38:07

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪
,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆姐妹篇,Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。

🏆姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。

🏆全部订阅,可加入Java学习星球,完成Java从入门、实战、进阶全方位的Java知识体系学习。

目录

一、什么是设计模式

二、设计模式的三大分类及关键点

1、创建型模式

2、结构型模式

3、行为型模式

三、设计模式的几种原则

1、单一职责原则

2、接口隔离原则

3、依赖倒转原则

4、里式代换原则

5、开闭原则

6、迪米特法则

7、合成复用原则

四、设计模式关系

五、设计模式感想

六、设计模式回顾


一、什么是设计模式

设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。

二、设计模式的三大分类及关键点

1、创建型模式

对象实例化的模式,创建型模式用于解耦对象的实例化过程。

  1. 单例模式:某个类智能有一个实例,提供一个全局的访问点。
  2. 工厂方法模式:一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
  3. 抽象工厂模式:创建相关或依赖对象的家族,而无需明确指定具体类。
  4. 建造者模式:封装一个复杂对象的创建过程,并可以按步骤构造。
  5. 原型模式:通过复制现有的实例来创建新的实例。

2、结构型模式

把类或对象结合在一起形成一个更大的结构。

  1. 装饰器模式:动态的给对象添加新的功能。
  2. 代理模式:为其它对象提供一个代理以便控制这个对象的访问。
  3. 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。
  4. 适配器模式:将一个类的方法接口转换成客户希望的另一个接口。
  5. 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。
  6. 外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
  7. 享元模式:通过共享技术来有效的支持大量细粒度的对象。

3、行为型模式

类和对象如何交互,及划分责任和算法。

  1. 策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。
  2. 模板方法模式:定义一个算法结构,而将一些步骤延迟到子类实现。
  3. 命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
  4. 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
  5. 观察者模式:对象间的一对多的依赖关系。
  6. 仲裁者模式:用一个中介对象来封装一系列的对象交互。
  7. 备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
  8. 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  9. 建造者模式:允许一个对象在其对象内部状态改变时改变它的行为。
  10. 责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
  11. 访问者模式:不改变数据结构的前提下,增加作用于一组对象元素的新功能。

三、设计模式的几种原则

1、单一职责原则

对于一个类,只有一个引起该类变化的原因;该类的职责是唯一的,且这个职责是唯一引起其他类变化的原因。

java设计模式1,单一职责原则

2、接口隔离原则

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

3、依赖倒转原则

依赖倒转原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

Java设计模式6,依赖倒置原则

4、里式代换原则

任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受影响时,基类才能真正的被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

java设计模式3,里氏替换原则

5、开闭原则

(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。

(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

java设计模式2,开闭原则

6、迪米特法则

迪米特法则又叫做最少知识原则,就是说一个对象应当对其它对象又尽可能少的了解,不和陌生人说话。

java设计模式4,迪米特法则

7、合成复用原则

合成复用原则要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

设计模式七大原则总结(超详细)

四、设计模式关系

五、设计模式感想

一共有23种设计模式,可以说都是为了提高代码的可读性、可扩展性、可复用性、类的可替换性、组件化、可移植性等等特性。通过接口、抽象类、继承、实现、委托、抽象、面向接口编程、多态、重载、重写等方式使得代码的这些特性得以彰显,可以说只有深刻的理解了这些概念背后的哲学思想才能更好的理解设计模式。在设计模式中有很多思想,比如可以使用委托的不要使用继承、开闭原则,面向扩展开放,面向修改关闭,里式代换原则,父类一定能被子类代替并使用,反置则不然,面向接口编程,功能层次和实现层次分离(桥接模式)、高内聚低耦合等思想,这些思想都是宝贵的,正是因为这样的思想的存在才使得代码的更新换代的时候能够尽可能少的甚至不用修改之前的代码,直接加入新的内容。提高软件的开发周期,便于维护和升级,便于查找和纠错,易于扩展和使用。

同样的设计模式主要分为三大类,创建型、行为型、结构型。我们可以简单的这样分类,只不过这样的分类似乎并不准确,不能一语道出所有的本质,设计模式是相互关联的,有的设计模式内部其实是使用了别的设计模式作为支撑的,但是大体上这样的一种划分便于我们去记忆,仅此而已。

六、设计模式回顾

从迭代器开始,我们将类中数据结构的遍历和类的功能实现分离出来,本质上使用了工厂模式;

其次我们学习了适配器模式,它将不同的接口进行适配,从而便于版本的兼容性以及其他功能;

然后我们学习了模板方法,使用模板面向抽象编程,便于新的子类的实现和管理;

之后学习了工厂模式,其实借用了模板模式来创建产品,是一种非常重要用处很广的一种方法;

然后我们学习了单例模式,有懒汉式、饿汉式等,生成关于某个类全局唯一的对象,注意多线程的影响;

之后是原型模式,用来复制复杂的对象,使用了clone方法,然后是builder模式,用一个新的类对已有的抽象接口进行整合和编程,从而构建出我们想要的东西;

然后是抽象工厂模式,使用了工厂模式,组合模式等模式,面向抽象编程,将抽象零件组装成抽象产品,便于具体工厂的创建,提高了代码的组件化和复用性;

然后是桥接模式,将类的功能层次和实现层次分割开来,便于对应的扩展和使用;

然后是策略模式,可以整体的替换策略,使用也很广泛;然后是组合模式,保证了同根同源,通过委托添加自己构成递归,树形结构,将具有树形特点的对象组合起来;

然后是装饰器模式,和组合模式的结构类似,同样是递归结构,从而可以不断的装饰,增加新的功能,很好用;

接着是visitor访问者模式,通过在类外访问类中的数据结构从而得到想要的结果,便于程序的可扩展性和组件化;

接着是责任链模式,推卸责任,根据问题的大小来考虑自己释放处理,本质是链表,便于职责分明;

然后是外观模式,通过整合各个类之间的调用关系,组建成了统一的接口(API),便于外部类的调用;

接着是仲裁者模式,将很多类之间互相关联的关系交给仲裁者处理,省去了各个类之间的嵌套和调动,有利于高内聚和低耦合,思路清晰,便于扩展;

然后是观察者模式,通过互相委托从而能够在被观察的类发生改变的时候得到相应的改变的信息并且处理;

然后是备忘录模式,通过在某一时刻的状态保存下来,便于恢复,在游戏中使用的比较多;

然后是状态模式,将状态当做类,从而职责分明,解除了很多繁琐的if和else这些分支逻辑,便于扩展;

然后是享元模式,轻量级对象,通过共用不变对象来实现;

然后是代理模式,懒加载真正的服务器,加快访问速度,代理是帮助服务器代理的;

然后是命令模式,将命令当做类,通过保存一些列命令,从而能够随时执行这些命令,需要清除命令的本质就是一些操作和数据;

最后是解释器模式,利用编程原理的方法,来更高层次的封装代码,将自己开发的java代码当做编译系统,从而不用改变java代码只修改更高语言层次的代码就能实现不同的功能。 

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪
,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆姐妹篇,Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。

🏆姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。

🏆全部订阅,可加入责任链模式,完成Java从入门、实战、进阶全方位的Java知识体系学习。


http://chatgpt.dhexx.cn/article/wmwLUnmI.shtml

相关文章

程序设计模式23+1种定义+UML图(有部分分析和联用)

程序设计模式这门课已经学完了,复习的时候做了一个这样的汇总,希望可以给后来学习这门课的同学一些帮助。 设计模式的分类 根据目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavio…

程序员必备的21种“设计模式之道”!

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的就是为了重用代码、让代码更容易被他人理解、保证代码可靠性。欢迎小伙伴们收藏关注,持续分享更多优质干货! 设计模式之道 何为设计模式&#xff1f…

Microsoft Office Visio 缺失安装文件的解决方法(附viso安装密钥)

工作环境(蓝色粗体字为特别注意内容) 1,软件环境:Windows 7、Microsoft Office Visio Professional 2007、Microsoft Office Enterprise2007 2,参考文献:https://zhidao.baidu.com/question/1669305667489578747.html 最近在写文…

Microsoft visio 2019 professional 安装

Visio 2019 pro,全程关闭防火墙,运行文件采用管理员运行 Visio 2019 pro 下载jihuo汉化 Visio 2019 pro 下载 从下方链接下载 链接:https://pan.baidu.com/s/1OQXUfOItLJhbKsDf_u3pEQ 提取码:1234 里面包含: 点击V…

Oracle高水位线 HWM降低技巧

作者:IT邦德 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 (Web\java\Python)工作,主要服务于生产制造 现拥有 Oracle 11g OCP/OCM、 Mysql、Oceanbase(OBCA)认证 分布式TBase\TDSQL数据库、国…

HMM

Author: 李文乐;Email: cocoleYYoutlook.comDatawhale 直观理解 马尔可夫链(英语:Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain,缩写为DTMC),因俄国数学家安德…

hwui简介

简介: hwui主要是android用于2d硬件绘图而加入的一个模块,在hwui之前,android主要是用skia来进行软件绘制,后由于绘制性能等问题,现在android的绘图几乎都是使用了hwui硬件加速绘图。hwui主要则是使用opengles来进行g…

【深度】广告流量分配HWM算法

在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。合约广告是提前签好合约的&am…

Oracle-HWM(High Water Mark) 高水位解读

读前须知:Oracle的逻辑存储管理 ORACLE在逻辑存储上分4个粒度 ,由大到小为: 表空间, 段, 区 和 块. 块Block 块:是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而…

Oracle 高水位(HWM: High Water Mark) 说明

一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个B…

分析HWM

下面结合官方文档和实验介绍下HWM: 以下英文摘自11gR2官方文档: HWM(high water mark):The boundary between used and unused space in a segment. ORACLE9i之后开始使用自动段空间管理即ASSM,它使用位图来管理段空间的使用情况,如果表空间ASSM,则表空间…

【计算广告】在线分配算法之 —— HWM(High water mark)介绍

该算法是雅虎工程师提出的一个解决合约制广告或者说GD(担保式投放)投放系统在线分配问题的贪心算法,思路很直接,下面是本人对照其论文整理的思路,里面有自己的理解。 论文题目:Ad Serving Using a Compact…

IMEI 码的校验和生成

IMEI 码的校验和生成 文章目录 IMEI 码的校验和生成IMEI 码Luhn算法代码实现C IMEI 码 IMEI 码,即手机的串号。它是 International Mobile Equipment Identity( 国际移动设备身份) 的简称,就像是手机的身份证,是用来帮助辨别手机身份真伪的。…

Android获取手机设备识别码(IMEI)和手机号码

最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡。 首先,在AndroidMainfest.x…

手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)

文章目录 Android篇1 IMEI和MEID2 DeviceId3 mac地址4 ANDROID_ID5 UUID6 OpenUDID7 Serial Number8 IDFA9 GAID iOS篇1 IMEI2 IDFA3 mac地址4 UDID5 UUID6 如何正确的获取设备的唯一标识7 什么是钥匙串 Android篇 1 IMEI和MEID (1) IMEI (International Mobile Equipment Id…

什么是IMEI / MEID?他们有什么不同?

摘要: 最近小编了解到一个新的概念:MEID码。说实话,一开始小编并不了解这是个什么。小编以为是不是打字的时候打错了啊,是不是要了解的是IMEI码呢?后来百度了一下才知道我理解错了。小编就做一回好学生,在苹果手机找回…

手机IMEI码规则介绍

2019独角兽企业重金招聘Python工程师标准>>> 手机IMEI码由15-17位数字组成。 第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码&#xff0c…

android 华为 imei,华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei...

华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei 每一部手机的串号都是不同的,如果想要查看华为手机的IMEI串号,我们该怎么样来查询呢?下面一起来看看操作的方法吧。 华为手机查询IMEI串号两种方法 方法…

IMEI是什么? 怎样查手机串号IMEI

IMEI的基本含义 IMEI(International Mobile Equipment Identity,移动设备国际识别码,又称为国际移动设备标识)是手机的唯一识别号码。我们从这个缩写的全称中来分析它的含义:“移动设备”就是手机,不包括便…

智能手机串号IMEI码丢失(无效IMEI)解决恢复办法

本方法本少爷亲测可行,故做一记录如下: 准备工作: 1、手机已经ROOT。没有ROOT的下载ROOT大师即可ROOT。 2、下载移动叔叔工具箱 3、下载MTK6575主板序列号及IMEI生成器 详细步骤 1、记录你的手机IMEI串号:IMEI串号,可以…