23种设计模式(简单介绍)

1.单例模式,整个项目中只能存在一个对象实例,这就被称为单例模式 ,单例模式又称为

饿汉式(一开始不加载,简称懒加载)
静态常量的方式,
静态代码块的方式

懒汉式(一开始就进行加载)
线程不安全 //
线程安全,同步方法 // 效率比较低每次都需要进行判断
线程安全,同步代码块 // 效率高,但是可以造成多个实例

双重检查 // 效率高,也不会造成多个实例
静态内部类 // 效率高 ,也不会出现安全问题
枚举 // 效率高,安全

// 2. 简单工厂模式

简单工厂模式是属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,
定义: 定义了一个创建对象的类,有这个类来封装实例化对象的行为

2.工厂方法模式:

定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方
法模式将对象的实例化推迟到子类

3、抽象工厂模式

  1. 抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无指明具体的类
  2. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。
  3. 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽4) 将工厂抽象成两层,AbsFactory(抽象工厂) 和 具体实现的工厂子类。程序员可根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇更利于代码的维护和扩展
    3)简单来说,通过抽象工厂来创建一个简单工厂

5、原型模式

  1. 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象
  2. 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节

6、建造者模式

  1. 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象
  2. 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细

7、适配器模式

  1. 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)
  2. 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式

8、桥接模式

桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展)

9、 装饰者模式

动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)

10、组合模式
组合模式(Composite Pattern)指将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性

11、外观模式

  1. 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
  2. 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部

12、享元模式

  1. 享元模式(Flyweight Pattern) 也叫 蝇量模式: 运用共享技术有效地支持大量细粒度的对象
  2. 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个
  3. 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高

13、代理模式

  1. 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
  2. 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
  3. 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)

14)、模板方法模式

模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。即应该让父类成为子类的模板,所有重复的代码都应该上升到父类,而不是让每个子类都去重复,子类只负责各自不同的算法步骤。

15)、命令模式

  1. 命令模式(Command Pattern):在软件设计中,我们经常需要
    向某些对象发送请求,但是并不知道请求的接收者是谁,也不知
    道被请求的操作是哪个,
    我们只需在程序运行时指定具体的请求接收者即可,此时,可以
    使用命令模式来进行设计
  2. 命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让
    对象之间的调用关系更加灵活,实现解耦。
  3. 在命名模式中,会将一个请求封装为一个对象,以便使用不同参
    数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。

16)、访问者模式

  1. 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
  2. 主要将数据结构与数据操作分离,解决 数据结构和操作耦合性问题
  3. 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问的接口
  4. 访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可选用访问者模式

17)、迭代器模式

  1. 迭代器模式(Iterator Pattern)是常用的设计模式,属于行为型模式
  2. 如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。
  3. 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结

18、观察者模式

观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,
依赖的对象为Observer,Subject通知Observer变化,比如这里的奶站是
Subject,是1的一方。用户时Observer,是多的一方

19、中介者模式

  1. 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
  2. 中介者模式属于行为型模式,使代码易于维护
  3. 比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用

20、备忘录模式

备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态) 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。而在软件层面,备忘模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作) 备忘录模式属于行为型

21、解释者模式

基本介绍

  1. 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。里的词法分析器和语法分析器都可以看做是解释器

  2. 解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式

  3. 应用场景• 应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树• 一些重复出现的问题可以用一种简单的语言来表达• 一个简单语法需要解释的场景

  4. 这样的例子还有,比如编译器、运算表达式计算、正则表达式、机器

22、状态模式

  1. 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换
  2. 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类

23、策略模式

  1. 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户2) 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合少用继承(客户通过组合方式使用策

24、责任链模式

  1. 职责链模式(Chain of Responsibility Pattern又叫 责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。
  2. 职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类

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

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

相关文章

使用高德地图和和风天气后,高德地图引入的插件就没办法在重新创建了?

以下所说的都是web,js调用,我使用的和风天气是它官网上的免费插件方式https://widget.qweather.com/ 高德地图和和风天气冲突 因为和风天气也是用的高德地图,只不过用的版本不一样,所以明明我引入的amap有一些需要的方法&#x…

如何撤销某个已经git add的文件以及如何撤销所有git add提交的文件?

如果你想撤销已经添加&#xff08;git add&#xff09;到暂存区的单个文件&#xff0c;可以使用 git reset 命令。以下是具体的命令格式&#xff1a; git reset <file>在这里&#xff0c;<file> 是你想要从暂存区中移除的文件名。比如&#xff0c;如果你想要撤销已…

什么是Vue的Vetur插件?它有哪些功能

引言 在现代前端开发中&#xff0c;Vue.js已经成为了一个备受欢迎的JavaScript框架。随着Vue.js的流行&#xff0c;开发人员需要强大的工具来提高他们的生产力和Vue.js项目的质量。Vetur插件是一个为Vue.js开发者提供的强大工具&#xff0c;它不仅提供了丰富的功能&#xff0c…

【超详细】前段开发之详细的Vue3入门教程,特别适合小白系统学习,入门到熟练使用Vue看这一篇就够了!

前言&#xff1a; 这篇文章更加侧重的是Vue3不同于Vue2的知识点&#xff0c;如果学习Vue2请看下面这篇文章 Vue2详细系统入门教程 11.2 Vue3 声明&#xff1a;图片资源来自于黑马程序员公开学习资料 本人在学习当中&#xff0c;详细整理了笔记&#xff0c;供大家参考学习 1…

什么是DOM和DOM操作

什么是DOM&#xff1f; DOM&#xff08;文档对象模型&#xff09;:HTML文档的结构化表示。允许JavaScript访问HTML元素和样式来操作它们。&#xff08;更改文本&#xff0c;HTML属性甚至CSS样式&#xff09; 树结构由HTML加载后自动生成 DOM树结构 这个是一个很简单的HTML代…

实验五 熟悉 Hive 的基本操作

实验环境&#xff1a; 1.操作系统&#xff1a;CentOS 7。 2.Hadoop 版本&#xff1a;3.3.0。 3.Hive 版本&#xff1a;3.1.2。 4.JDK 版本&#xff1a;1.8。 实验内容与完成情况&#xff1a; &#xff08;1&#xff09;创建一个内部表 stocks&#xff0c;字段分隔符为英文逗号…

SkyWalking分布式链路追踪学习

为什么要用分布式链路追踪 实际生产中&#xff0c;面对几十个、甚至成百上千个的微服务实例&#xff0c;如果一旦某个实例发生宕机&#xff0c;如果不能快速定位、提交预警&#xff0c;对实际生产造成的损失无疑是巨大的。所以&#xff0c;要对微服务进行监控、预警&#xff0…

【owt-server】切换node和npm版本

fix : - npm v9.7.1 is known not to run on Node.js v10.21.0.npm 版本与node版本不匹配 npm v9.7.1 is known not to run on Node.js v10.21.0.root@k8s-master-2K4G:~/clash# npm init ERROR: npm v9.7.1 is known not to run on Node.js v10.21.0. This version of npm s…

颜色+情感的英语表达还有这些,零基础学英语口语去哪里,柯桥有推荐的吗?

当我们探讨关于"blue"&#xff08;蓝色&#xff09;的多义性时&#xff0c;我们会发现英语中有许多其他词汇也有类似的双关意义。 既可以表示一种颜色或物理属性&#xff0c;又可以代表一种情感或心理状态。 这种现象在语言中很常见&#xff0c;反映了语言的丰富性和…

信息化发展70

两化融合与智能制造 “坚持自主可控、安全高效&#xff0c;推进产业基础高级化、产业链现代化&#xff0c;保持制造业比重基本稳定&#xff0c;增强制造业竞争优势&#xff0c;推动制造业高质量发展”是工业发展的重要战略。“深入实施智能制造和绿色制造工程&#xff0c;发展…

如何将图片转为ico格式

这里主要是记录一个网站&#xff0c;如果你有更好的办法欢迎留言~ ico简介 ICO&#xff08;Icon&#xff09;是一种用于表示图标的文件格式&#xff0c;常用于Windows操作系统中。ICO格式的图片通常用于表示应用程序、文件夹、网站等的图标。 ICO文件可以包含多个图标&#x…

星际争霸之小霸王之小蜜蜂(十五)--剧将终场

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;十四&#xff09;--资本家的眼泪 星际争霸之小霸王之小蜜蜂&#xff08;十三&#xff09;--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂&#xff08;十二&#xff09;--猫有九条命 星际争霸之小霸王之小蜜蜂&#xff08;十一…

什么是RESTful API?它的设计原则是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是RESTful API&#xff1f;RESTful API的设计原则示例 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感…

C语言 cortex-A7核 UART总线 实验

一、C 1&#xff09;uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…

汽车三高试验离不开的远程试验管理平台-TFM

一 背景 众所周知&#xff0c;车辆在量产之前都要经过长时间的耐久性试验和多种汽车适应性或法规试验。道路试验就是在汽车上装设测试仪表和施加模拟载荷&#xff0c;并按实际使用条件来进行测试。此外&#xff0c;在实际试验场地和试验时间上也是有一定规定的。企业根据不同的…

2024年考研倒计时三个月不到,快来获取公共科目和统考科目大纲

今天是2023年9月28日&#xff0c;距离2024年的考研还有不到三个月的时间&#xff0c;最后阶段该如何复习最有效呢&#xff1f; 很多学霸的经验是&#xff1a;在掌握了教材基础知识的前提下&#xff0c;对照着大纲进行查漏补缺。这种对照考试大纲进行复习和备考的方法不只是适合…

澳大利亚新版《2023年消费品(36个月以下儿童玩具) 安全标准》发布 旨在降低危险小零件的伤害

2023年9月4日&#xff0c;澳大利亚政府发布了新的儿童玩具强制性安全标准《2023年消费品(36个月以下儿童玩具)安全标准》&#xff08;Consumer Goods (Toys for Children up to and including 36 Months of Age) Safety Standard 2023&#xff09;。该强制性标准旨在尽可能地降…

数据中心智能母线监控解决方案

安科瑞 崔丽洁 01概述 安科瑞智能母线监控产品分为交流和直流母线监控两类&#xff0c;包括始端箱监测模块、插接箱监测模块以及触摸屏&#xff0c;另外还可以搭配母线槽连接器红外测温模块用于监测母线槽的运行温度&#xff0c;确保母线槽配电安全。 02应用场景 AMB系列母线监…

R语言中的数据重塑

文章目录 介绍reshape2::melt()的用法实例reshape2::dcast()的用法实例tidyr::gather()的用法tidyr::spread()的用法介绍 tidyverse系列包中的函数操作都是针对简洁数据框进行的,对于不是简洁的数据,实现需要进行数据重塑。数据重塑主要包括长宽表的转换、拆分/合并列、方形…

Day05-循环高级和数组

循环高级 1.无限循环 概念&#xff1a; 又叫死循环。循环一直停不下来。 for格式&#xff1a; for(;;){System.out.println("循环执行一直在打印内容"); } 解释&#xff1a; 初始化语句可以空着不写&#xff0c;表示循环之前不定义任何的控制变量。 条件判断…