设计模式
文章平均质量分 56
Q z1997
这个作者很懒,什么都没留下…
展开
-
设计模式: 两阶段终止
两阶段终止 package com.example.demo.hmjuc; import java.util.concurrent.TimeUnit; /** * 两阶段终止 * * @author zhangqi * @date 2022/4/12 21:21 */ public class Test5 { public static void main(String[] args) { TowPhaseTermination towPhaseTermination原创 2022-05-05 09:43:35 · 571 阅读 · 0 评论 -
职责链模式
职责链模式 基本介绍 职责链模式(Chain of Responsibility Pattern), 又叫 责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。 职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 这种类型的设计模式属于行为型模式 职责链模式的原理类图 对原理类图的说明-即(职责链模式的角色及职责) Handler : 抽象的处理者, 定义了一个处理请求的接原创 2022-02-04 23:21:38 · 241 阅读 · 0 评论 -
策略 模式
策略模式 策略模式基本介绍 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。 策略模式的原理类图 从上图可以看到,客户 context 有成员变量 strategy 或者其他的策略接口 ,至于需要使用到哪个策略,我们可以在构造器原创 2022-02-04 22:16:57 · 76 阅读 · 0 评论 -
状态 模式
状态模式 基本介绍 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 状态模式的原理类图 对原理类图的说明-即(状态模式的角色及职责) Context 类为环境角色, 用于维护 State 实例,这个实例定义当前状态 State 是抽象状态角色,定义一个接口封装与 Context 的一个特点接口相关行为 ConcreteS原创 2022-02-04 21:36:59 · 81 阅读 · 0 评论 -
解释器模式
解释器模式 基本介绍 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器 解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器, 使用该解释器来解释语言中的句子(表达式) 应用场景 -应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树 -一些重复出现的问题可以用一种简单的语言来表达 -一个简单语法需原创 2022-02-04 20:48:34 · 93 阅读 · 0 评论 -
备忘录模式
备忘录模式 基本介绍 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作 备忘录模式属于行为型模式 对原理类图的说明-即(原创 2022-02-04 19:33:06 · 106 阅读 · 0 评论 -
中介者模式
中介者模式 基本介绍 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 中介者模式属于行为型模式,使代码易于维护 比如 MVC 模式,C(Controller 控制器)是 M(Model 模型)和 V(View 视图)的中介者,在前后端交互时起到了中间人的作用 中介者模式的原理类图 对原理类图的说明-即(中介者模式的角色及职责) Mediator 就是抽象中介者,定义了同事对原创 2022-02-04 18:40:59 · 83 阅读 · 0 评论 -
观察者模式
观察者模式 Subject:登记注册、移除和通知 1)registerObserver 注 册 2)removeObserver 移 除 3)notifyObservers() 通知所有的注册的用户,根据不同需求,可以是更新数据,让用户来取,也可能是实施推送, 看具体需求定 Observer:接收输入 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,Subject 通知 Observer 变化,比如这里的奶站是 Subject,是 1 的一原创 2022-02-03 20:35:05 · 162 阅读 · 0 评论 -
迭代器模式
迭代器模式 基本介绍 迭代器模式(Iterator Pattern)是常用的设计模式,属于行为型模式 如果我们的集合元素是用不同的方式实现的,有数组,还有 java 的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。 对原理类图的说明-即(迭代器模式的角色及职责) Iterator : 迭原创 2022-02-03 19:20:06 · 123 阅读 · 0 评论 -
访问者模式
访问者模式 访问者模式基本介绍 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 主要将数据结构与数据操作分离,解决 数据结构和操作耦合性问题 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口 访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时 需要避免让这些操作"污染"这些对象的类,可以选用访问者模式解决 访问者模式的原理类图原创 2022-02-03 18:22:09 · 616 阅读 · 0 评论 -
命令 模式
命令模式 命令模式基本介绍 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个, 我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计 命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。 在命名模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。 通俗易懂的理解:将军发布命令,士兵去原创 2022-02-03 17:01:52 · 104 阅读 · 0 评论 -
模版方法模式
模版方法模式 基本介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单说,模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤 这种类型的设计模式属于行为型模式。 模板方法模式的原理类图 原理类图的说明-即(模板方法模式的角色及职责)原创 2022-02-02 20:15:39 · 72 阅读 · 0 评论 -
代理 模式
代理模式 代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。 代理模式示意图 静态代理 静态代理在使用时,需要定原创 2022-02-02 19:36:02 · 62 阅读 · 0 评论 -
享元 模式
享元模式 基本介绍 享元模式(Flyweight Pattern) 也叫 蝇量模式: 运用共享技术有效地支持大量细粒度的对象 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率 享元模式经典的应用场景就是池技术了,String 常量池、数原创 2022-02-02 18:47:49 · 72 阅读 · 0 评论 -
外观 模式
外观模式 介绍: 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 对类图说明(分类外观模式的角色) 外观类(Facade): 为调用端提供统一的调用接口, 外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象 调用者(Client): 外观接口的调用者 子系统原创 2022-02-02 17:43:38 · 60 阅读 · 0 评论 -
组合 模式
组合模式 基本介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 这种类型的设计模式属于结构型模式。 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象 Component :这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理 Component 子部件,原创 2022-02-02 12:47:02 · 63 阅读 · 0 评论 -
装饰者模式
装饰者模式 案例: 星巴克咖啡订单项目(咖啡馆): 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。 装饰者模式定义: 装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了原创 2022-02-02 12:02:57 · 64 阅读 · 0 评论 -
桥接 模式
桥接模式 基本介绍 1)桥接模式(Bridge 模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。 2)是一种结构型设计模式 3)Bridge 模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展 上图做了说明 1)Client 类:桥接模式的调用者 2)抽象类(Abstraction) :维护了 Imple原创 2022-02-01 22:02:14 · 139 阅读 · 0 评论 -
适配器设计模式
适配器设计模式 基本介绍 1)适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 2)适配器模式属于结构型模式 3)主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 1)适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 2)从用户的角度看不到被适配者,是解耦的 3)用户调用适配器转化出来的目标接口方法,适配器再调用被适配者原创 2022-02-01 19:43:10 · 128 阅读 · 0 评论 -
建造者模式(Builder模式)
建造者模式(Builder模式) 需求: 1)需要建房子:这一过程为打桩、砌墙、封顶 2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的. 3)请编写程序,完成需求. 基本介绍 1)建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 2)建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它原创 2022-01-31 19:18:37 · 227 阅读 · 0 评论 -
原型 模式
原型模式 问题; 现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。 基本介绍: 1)原型模式(Prototype 模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 2)原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节 3)工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()原创 2022-01-31 18:38:23 · 132 阅读 · 0 评论 -
工厂 模式
工厂模式 简单工厂模式 看一个披萨的项目:要便于披萨种类的扩展,要便于维护 披萨的种类很多 披萨的制作有 prepare,bake, cut, box 完成披萨店订购功能 1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式 2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式. packa原创 2022-01-31 17:25:50 · 69 阅读 · 0 评论 -
单例设计模式
单例设计模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。 比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。 5.2单例设计模式八种方式 单例模式有八种方式: 饿汉式(静态常量) packag原创 2022-01-30 23:03:04 · 63 阅读 · 0 评论 -
设计模式概述
设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。 <<设计模式>> 是经典的书,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Desi原创 2022-01-30 19:04:58 · 62 阅读 · 0 评论 -
UML类图关系
类图关系 依赖 在一个类中使用的就表示依赖 关联 泛化(继承) 就是Java中的继承 实现 就是Java中的实现 聚合 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。 如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示: 组合 组合关系:也是整体与部分的关系,但是整体与部分不可以分原创 2022-01-30 19:03:10 · 55 阅读 · 0 评论 -
设计模式七大原则
设计模式七大原则 单一职责 对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2 接口隔离 依赖倒转 里氏替换 开闭原创 OCP 迪米特法则 合成复用原则 ...原创 2022-01-30 16:49:43 · 46 阅读 · 0 评论