
24种设计模式
文章平均质量分 70
12345sdfad
新手码农一只
展开
-
设计模式总结
1. 设计原则单一职责原则:一个对象或者一个方法只做一件事能够降低实体的复杂度,便于维护和拓展提高实体的可读性改动代码的风险降低了,也不会牵一发而动全身开闭原则:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭不会改变原有功能,从而引发故障里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象为继承定义了规范,实现更好的继承迪米特原则:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。降低了类之间的耦合度,提高了模原创 2021-09-08 16:28:57 · 199 阅读 · 0 评论 -
中介者模式
文章目录1. 中介者模式(Command Pattern)1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 Timer类1. 中介者模式(Command Pattern)1.1 介绍中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个原创 2021-09-08 14:57:13 · 70 阅读 · 0 评论 -
迭代器模式
1. 迭代器模式(Command Pattern)1.1 介绍意图 :提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决 :不同的方式来遍历整个整合对象。如何解决 :把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码 :定义接口:hasNext, next。1.2 优缺点优点它支持以不同的方式遍历一个聚合对象迭代器简化了聚合类在同一个聚合上可以有多个遍历在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码缺点原创 2021-09-08 14:53:16 · 76 阅读 · 0 评论 -
备忘录模式
文章目录1. 备忘录模式(Command Pattern)1.1 介绍1.2 优缺点1.3 实现场景1.4 注意事项2. 案例实现3. 源码实现1. 备忘录模式(Command Pattern)1.1 介绍意图 :在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决 :所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。如何解决 :通过一个备忘录类专门存储对象状态。关原创 2021-09-08 14:51:28 · 67 阅读 · 0 评论 -
模板方法模式
文章目录1. 模板方法模式1.1 介绍1.2 优缺点1.3 适用场景1.4 注意事项3. 实例3. 源码实现3.1 Java.Object3.2 RestTemplate, JmsTemplate, JpaTemplate1. 模板方法模式1.1 介绍意图 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决 :一些方法通用,却在每一个子类都重新写了这一方法。关键代码 :在抽象类实现,其他步骤在子类实现。1原创 2021-09-02 17:47:19 · 61 阅读 · 0 评论 -
策略模式~
文章目录1. 策略模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 Java集合排序3.2 Resource1. 策略模式1.1 介绍策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想。策略模式的三个角色:抽象策略角色、具体策略角色、环境角色(对抽象策略角色的引用)实现步骤:1.定义抽象角色类(定原创 2021-09-02 17:46:49 · 148 阅读 · 0 评论 -
观察者模式~
文章目录1. 观察者模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 Spring事件驱动模型3.2 Vue的订阅—通知机制1. 观察者模式1.1 介绍当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。1.2 优缺点优点观原创 2021-09-02 17:46:18 · 96 阅读 · 0 评论 -
解释器模式~
文章目录1. 解释器模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码1. 解释器模式1.1 介绍解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接原创 2021-09-02 17:45:45 · 77 阅读 · 0 评论 -
命令模式~
文章目录1. 命令模式1.1 介绍1.2 优缺点1.4 注意事项2. 案例代码1. 命令模式1.1 介绍命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。1.2 优缺点优点通过引入中间件(抽象接口)降低系统的耦合度。扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。可以实现宏命令。命令模式可以与组合模原创 2021-09-02 17:45:14 · 68 阅读 · 0 评论 -
访问者模式
文章目录1. 访问者模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现1. 访问者模式1.1 介绍在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。它讲的是表示一个作用于某对象结构中的各元素的操作,它使我可以在不改变各元素的类的前提下定义作用于这些元素的新操作。原创 2021-09-02 17:44:43 · 77 阅读 · 0 评论 -
责任链模式~
文章目录1. 责任链模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码3. 源码实现3.1 异常机制3.2 事件冒泡1. 责任链模式1.1 介绍责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过原创 2021-09-02 17:44:07 · 104 阅读 · 0 评论 -
状态模式~
文章目录1. 状态模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现1. 状态模式1.1 介绍状态模式(state pattern) 的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。1.2 优缺点优点结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行原创 2021-09-02 17:43:35 · 79 阅读 · 0 评论 -
组合模式~
文章目录1. 组合模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码3. 源码实现3.1 `java.awt.container`3.2 `java.util.HashMap`1. 组合模式1.1 介绍组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。将对象组成树形结原创 2021-09-02 17:42:59 · 114 阅读 · 0 评论 -
享元模式~
文章目录1. 享元模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码3. 源码实现3.1 包装类1. 享元模式1.1 介绍享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜原创 2021-09-02 17:42:26 · 103 阅读 · 0 评论 -
代理模式~
文章目录1. 代理模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码2.2 动态代理2.2.1 jdk的动态代理2.2.2 cglib动态代理2.2.3 jdk动态代理和cglib动态代理的对比3. 源码实现3.1 JDK动态代理3.2 CGLIB动态代理1. 代理模式1.1 介绍**代理模式的作用是为某对象提供一种代理以控制对该对象的访问。**即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。由于静态代理会导致类文件大量增多,所以 Java 中动态代原创 2021-09-01 00:44:18 · 100 阅读 · 0 评论 -
桥接模式~
文章目录1. 桥接模式1.1 介绍1.2 优缺点1.3 适用场景1.4 注意事项2. 案例实现3. 源码实现3.1 JDBC1. 桥接模式1.1 介绍桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。1.2 优缺点优点抽象和实现的分离优秀的扩展能力实现细节对客户透明原创 2021-08-31 20:10:43 · 96 阅读 · 0 评论 -
外观模式~
文章目录1. 外观模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码3. 源码实现3.1 Tomcat1. 外观模式1.1 介绍外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。1.2 优缺点优点减少系统相互依赖,减少代码量提高灵活性,提原创 2021-09-01 00:41:23 · 83 阅读 · 0 评论 -
装饰器模式
文章目录1. 装饰器模式1.1 介绍1.2 优点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 java.io.*1. 装饰器模式1.1 介绍一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,**并且随着扩展功能的增多,子类会很膨胀。**如何在不增加很多子类的情况下拓展现有类呢?装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了原创 2021-08-31 20:10:19 · 72 阅读 · 0 评论 -
适配器模式
文章目录1. 适配器模式1.2 优缺点1.3 使用场景1.4 注意事项3. 源码实现3.1 java.util.Enumeration3.2 Spring AOP1. 适配器模式##1.1 介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样原创 2021-08-31 20:09:37 · 98 阅读 · 0 评论 -
原型模式~
文章目录1. 原型模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例代码3. 源码实现3.1 java.lang.object1. 原型模式1.1 介绍指用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。常用于创建某对象的代价比较大时,例如一个对象需要在一个高代价的数据库操作之后被创建。原型模式的克隆分为浅克隆和深克隆浅克隆:创建一个新对象,只负责克隆按值传递的数据(比如基本数据类型、String类型),而对于非基本类型属性,仍指向原有属性所指向的对象的内存原创 2021-08-31 20:09:06 · 69 阅读 · 0 评论 -
单例模式~
文章目录1. 单例模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 代码实现3. 源码实现3.1 java.lang.Runtime3.2 Spring中的Bean1. 单例模式1.1 介绍这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式的特点构造方法私有、实例化的变量引用私有、获取实例的方法共有1.2 优缺点优点在内存中只有一个实例,减少了原创 2021-08-31 20:08:32 · 68 阅读 · 0 评论 -
建造者模式
文章目录1. 建造者模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 StringBuffer&StringBuilder3. 2 Spring中的BeanDefinitionBuilder1. 建造者模式1.1 介绍建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类原创 2021-08-31 20:07:51 · 104 阅读 · 0 评论 -
抽象工厂模式
文章目录1. 抽象工厂模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 Spring使用工厂模式创建Bean1. 抽象工厂模式1.1 介绍抽象工厂在工厂方法的基础上进一步扩展了工厂的功能,此时工厂不仅仅能够生产一种产品,而是可以生产多种。1.2 优缺点优点当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。缺点产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码原创 2021-08-31 20:06:43 · 113 阅读 · 0 评论 -
工厂方法模式
文章目录1. 工厂方法模式1.1 介绍1.2 优缺点1.3 适用场景1.4 注意事项2. 案例实现3. 源码实现3.1 Java中ArrayList中的iterator1. 工厂方法模式1.1 介绍上面提到的简单工厂模式为每种对象创建一个工厂,通过传入参数实现生产,但实际上这在一定程度上还存在调度和被调用之间的耦合,而工厂方法模式将工厂抽象化,通过在生产工厂类时就指定创建的对象,进一步降低了耦合,形成工厂—产品一一对应的模式,因此满足了“开放-封闭”原则。1.2 优缺点优点抽象工厂类通过其原创 2021-08-31 20:06:08 · 71 阅读 · 0 评论 -
简单工厂模式
文章目录1. 简单工厂模式1.1 介绍1.2 优缺点1.3 使用场景1.4 注意事项2. 案例实现3. 源码实现3.1 JDK中Calendar中1. 简单工厂模式1.1 介绍工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,**我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。**常见的工厂模式有简单工厂模式、工厂方法模式、抽象工程模式等。1.2原创 2021-08-31 20:05:42 · 79 阅读 · 0 评论 -
六大设计原则
文章目录1. 单一职责原则2. 开闭原则3. 里氏替换原则4. 迪米特原则5. 接口隔离原则5.1 介绍5.2 优缺点5.3 实现方法6. 依赖倒置原则7. 合成复用原则1. 单一职责原则当对实现多种功能的对象进行修改了,可能牵一发而动全身。因此最好对象只做一件事,便于代码维护和拓展。此举能够降低类的复杂度,一个类负责一件事,便于代码维护。优点代码的粒度降低了,类的复杂度降低了。可读性提高了,每个类的职责都很明确,可读性自然更好。可维护性提高了,可读性提高了,一旦出现 bug ,自然更容易找原创 2021-08-31 20:04:42 · 78 阅读 · 0 评论