![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
文章平均质量分 88
Java23种设计模式概念及应用场景
归思君
这个作者很懒,什么都没留下…
展开
-
静态代理还是动态代理?来聊聊Java中的代理设计模式
代理模式(Proxy Design Pattern)是一种结构型设计模式,为一个对象提供一个代理对象,然后使用代理对象控制对原对象的引用。即通过代理对象访问目标对象。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。原创 2024-01-06 14:04:03 · 856 阅读 · 0 评论 -
浅析观察者模式在Java中的应用
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式原创 2024-01-06 13:58:10 · 1446 阅读 · 0 评论 -
还在用if-else? 用策略模式干掉它
策略模式是一种**行为**设计模式,它将一组行为转换为对象, 并使其在原始上下文对象内部能够相互替换。大白话就是比如我写一个登录业务,目前需要满足能通过系统内、微信等平台进行登录,未来还有可能引入其他的平台,这个时候就可以采用策略模式,来让不同的平台的登录都有对应的策略路径。原创 2024-01-05 14:24:32 · 390 阅读 · 0 评论 -
最简单的设计模式是单例?
单例模式可以说是Java中最简单的设计模式,但同时也是技术面试中频率极高的面试题。因为它不仅涉及到设计模式,还包括了关于线程安全、内存模型、类加载等机制。所以说它是最简单的吗?原创 2024-01-05 09:59:24 · 1070 阅读 · 0 评论 -
解释器模式及其应用场景
解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。比如说在计算器中,我们输入一个加法/减法表达式(中缀表达式)“1+6-5”字符串,就能在计算器中输出结果2。而我们知道,一般的程序语言像C++、Java和Python无法直接解释这个字符串,那么就必须定义规定格式和语法的解释器,来对这个字符串表达式进行解释成程序语言能计算的方式(后缀表达式),原创 2022-04-27 17:39:14 · 1574 阅读 · 0 评论 -
访问者模式及其应用场景
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。借用《Java设计模式》中的例子说明:在医院医生开具药单后,划价人员拿到药单后会根据药单上的药品名称和数量计算总价,而药房工作人员则根据药品名称和数量准备药品。如下图所示:那么药品处方可以看成是一个药品信息的集合,里面包含了一种或多种不同类型的药品信息,不同类型的工作人员在操作统一药品信息集合时将提供不同的处理方式,而且可能还会增加新类型原创 2022-04-27 17:38:13 · 4240 阅读 · 4 评论 -
状态模式及其实现
状态模式(State Pattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统的开发中:有限状态机(Finite State Machine,FSM),状态机有三个组成部分:状态(State)、事件(Event)和动作(Action)。其中事件也叫作转移条件(Transition Condition),事件主要用于触发状态的转移及动作的执行,动作不是必须的,也可能只转移状态,不执行任何动作。一、状态模式的介绍原创 2022-04-24 08:19:40 · 588 阅读 · 0 评论 -
观察者模式及其应用场景
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式。指在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。比如说Redis 中的基于频道的发布订阅就是观察者模式的应用:一、观察者模式的介绍观察者模式是一种对象行为型模式,下面就来看看观察者模式原创 2022-04-24 08:18:28 · 5801 阅读 · 0 评论 -
备忘录模式及其实现场景
备忘录模式(Memento Design Pattern),也叫快照(Snapshot)模式。指在不违背封装原则前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。备忘录模式在日常中很常见,比如Word中的回退,MySQL中的undo log日志,Git版本管理等等,我们都可以从当前状态退回之前保存的状态。比如Git中的checkout命令就可以从main版本切换到之前的bugFix版本:一、备忘录模式介绍备忘录是一种对象行为型模式,它提供了一种可以恢复状态的机原创 2022-04-22 11:56:09 · 1386 阅读 · 1 评论 -
中介者模式及其应用场景
中介者(Mediator)模式指定义了一个单独的中介对象,来封装一组对象之间的交互。即将这组对象之间的交互委派给中介对象,从而来避免对象之间的直接交互。比如我们各种设备之间的通信,就是通过服务器作为中介对象来进行交互:一、中介者模式介绍中介者又叫做调停模式,是一种对象行为型模式,它降低了对象之间的耦合性,让对象易于被独立地调用,是迪米特法则的典型应用,下面就来看看中介者模式的结构和实现:1.1 中介者模式的结构中介者模式主要通过引入用于协调其他对象或类之间相互调用的中介者类,为了让系统具有具有更好原创 2022-04-22 11:55:08 · 2062 阅读 · 1 评论 -
迭代器模式及其在Java 容器中的应用
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。这就是迭代器模式的一、迭代器模式介绍迭代器模式也就是提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。它是一种行为型模式,下面就来看看迭代器模式的结构:1.1 迭代器模式的结构迭代器模式的结构很简单,就是将聚合对象中的遍历行为分离,并抽象成迭代器类来实现:Agg原创 2022-04-21 09:34:35 · 387 阅读 · 0 评论 -
命令模式及在Spring JdbcTemplate 中的实现
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。一、命令模式介绍命令模式将发送者与接受者完全解耦,发送者与接收者之间没有直接的联系,发送者只需要如何发送请求,而不需要关心请求是如何完成的。下面就来看看命令模式的结构和实现:1.1 命令模式的结构将调用者和实现者进行分离,其结构如下所示:Command:抽象命令角色,声明执原创 2022-04-21 09:33:41 · 738 阅读 · 0 评论 -
责任链模式实现及在Filter中的应用
责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。一、责任链模式介绍其实在日常生活中,有不少使用责任链的场景。比如公司采购审批流程,需要各个部门领导的批准同意。在责任链模式中,客户端只需要将请求发送到责任链上,无须关心请求的处理细节和传递,请求会自动进行传递。1.1 责任链模式的结构责任链模式的结构大致如下所示:a原创 2022-04-20 08:27:16 · 1260 阅读 · 0 评论 -
组合模式及其在树形结构中的应用
组合(Composite)模式,又叫做树形模式,主要用来处理树形结构数据。是将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。让客户端可以统一单个对象和组合对象的处理逻辑。一、组合模式介绍组合模式通过以树形结构来表示“部分-整体”,使得用户对叶对象和组合对象的使用具有一致性。也就是说在组合模式中,整个树形结构的对象都属于同一种类型,用户可以对叶对象和组合对象统一处理。1.1 组合模式分类组合模式主要有透明式和安全式两种分类,下面来分别说明1.1.1 透明式组合模式在该方式中,抽象构原创 2022-04-20 08:26:19 · 377 阅读 · 0 评论 -
设计模式之享元模式及其在String、Java 包装类中的应用
享元(Flyweight)模式:顾名思义就是被共享的单元。意图是复用对象,节省内存,提升系统的访问效率。比如在红白机冒险岛游戏中的背景花、草、树木等对象,实际上是可以多次被不同场景所复用共享,也是为什么以前的游戏占用那么小的内存,却让我们感觉地图很大的原因。一、享元模式介绍1.1 享元模式的定义享元模式的定义是:运用共享技术来有效地支持大量细粒度对象的复用。这里就提到了两个要求:细粒度和共享对象。而正是因为要求细粒度,那么势必会造成对象数量过多而且对象性质相近。所以我们可以将对象分为:内部状态和外原创 2022-04-18 14:13:07 · 415 阅读 · 0 评论 -
设计模式之外观模式及其应用场景
外观(Facade)模式,又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问的模式。比如说我们日常生活中医院的分诊台,就是实现统一访问接口的特性:一、外观模式介绍外观模式提供一个统一接口,用来访问子系统的一系列接口,从而让子系统更容易使用。这个子系统可以有多种理解方式,它既可以是一个完整的系统,也可以是更细粒度的类或者模块。主要用在接口设计方面,下面就来看看外观模式的结构:1.1 外观模式的结构Facade:外观类角色,作用是为多个子系统提供一个统一接口原创 2022-04-18 14:12:00 · 1279 阅读 · 0 评论 -
这篇文章告诉你装饰器模式及其在Java IO类和MyBatis中的应用
装饰器(Decorator)模式:指不改变现有对象结构的情况下,动态地给该对象增加额外功能。一、装饰器模式介绍装饰器模式允许向一个现有的对象添加新的功能,同时不改变其结果。比如Java 中的IO框架中,FileInputStream(处理文件)、ByteArrayInputStream(处理字节数组)、BufferedInputStream(带缓存的处理类)等就是对InputStream进行的功能扩展,这就是装饰器模式的典型应用。比如下面就是以缓存方式读取输入流:InputStream inputSt原创 2022-04-17 12:32:47 · 379 阅读 · 0 评论 -
你知道桥接模式在JDBC中的应用吗
桥接(Bridge)模式是指将抽象部分与实现部分相分离,使它们都可以独立的发生变化。一、桥接模式介绍我们知道,抽象部分一般与实现部分连接有两种方式:继承和实现。那么如何将其解耦分离,桥接模式提供一种方式,也就是将强关联转为弱关联,将继承转换为组合关系。如下图所示,取消两者的继承关系,改用组合关系:1.1 桥接模式的结构我们可以看看桥接模式是怎么解耦,利用组合连接抽象和实现部分,如下所示:其结构中包含如下角色:Abstraction:抽象化角色,定义抽象类,包含一个对实现化对象的引用(组合)原创 2022-04-17 12:26:34 · 670 阅读 · 1 评论 -
关于Java适配器模式,你该了解这些
适配器模式(Adapter)指的是将一个类的接口转换成另一个可以兼容的接口。比如我们日常生活中的转换头、古早时期使用的电池万能充,就相当于程序中使用的适配器模式。一、适配器模式的介绍1.1 适配器模式的结构适配器模式模式主要分为类结构型模式和对象结构型模式两种:1.1.1 类适配器模式类适配器模式通过多重继承,将一个接口与另一个接口进行匹配。而对于一些面向对象语言如C#、Java不支持多重继承,那么我们就可以继承一个类,同时实现多个接口来达到适配器的效果。如下图所示:Adaptee:适配者原创 2022-04-16 11:36:02 · 3393 阅读 · 0 评论 -
一篇文章快速搞懂代理模式及其实现
代理模式(Proxy Design Pattern)是为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。一、代理模式介绍在结束创建型模式的讲解后,从这一篇开始就进入到了结构型模式,结构型模式主要是总结一些类和或对象组合在一起的结构。代理模式在不改变原始代理类的情况下,通过引入代理类来给原始类附加功能。代理模式的主要结构如下:Subject:抽象主题类,通过接口或抽象类声明主题和代理对象实现的业务方法Re原创 2022-04-16 11:33:50 · 378 阅读 · 0 评论 -
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。一、原型模式介绍原型设计模式(Prototype Design Pattern)指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在Java语言中就存在克隆的方式,比如浅拷贝和深拷贝。对于一般的对象原创 2022-04-15 15:27:10 · 184 阅读 · 2 评论 -
设计模式学习笔记(五)建造者模式和其他对象创建方式的区别
一、建造者模式介绍1.1 建造者模式的定义建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。也就是通过多个简单对象组装出一个复杂对象的过程,比如机器人需要多步简单的组装、装修需要各个子步骤的合并完成:1.2 建造者模式的特点优点建造者模式将零件细节进行了封装,实现了构建和表示分离建造者可以对创建过程逐步细化,而不对其它模块产生影响,能方便控制细节风险缺点:如原创 2022-04-15 15:25:14 · 665 阅读 · 1 评论 -
设计模式学习笔记(四)单例模式的实现方式和使用场景
单例模式原创 2022-04-14 10:32:58 · 688 阅读 · 0 评论 -
设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?先说结论:简单工厂:只有唯一工厂(简单工厂),一个产品接口/抽象类,根据简单工厂中的静态方法来创建具体产品对象。适用于产品较少,几乎不扩展的情景工厂方法:有多个工厂(抽象工厂+多个具体工厂),一个产品接口/抽象类,根据继承抽象工厂中的原创 2022-04-14 10:30:26 · 1506 阅读 · 2 评论 -
设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
一、工厂模式(Factory pattern)工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。1.1 工厂模式介绍工厂模式是Java 中比较常见的一种设计模式,实现方法是定义一个统一创建对象的接口,让其子类自己决定去实例化那个工厂类,解决不同条件下创建不同实例的问题。工厂方法模式在实际使用时会和其他的设计模式一起结合,而不是单独使用。比如在Lottery 项目中奖品的发放就是工厂+模板+策略模式。1.2 工厂模式实现举个例子,比原创 2022-04-02 12:07:34 · 3629 阅读 · 0 评论 -
设计模式学习笔记(一)设计模式的原则
什么是设计模式?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码的可靠性。平常主要有这样的三大类型:那么这些设计模式具体会遵循哪些原则呢?设计模式遵循的原则1. 单一职责(Simple responsibility principle, SRP)又叫做单一功能原则,每个类只负责一项职责。是面向对象五个基本原则之一。原则定义:一个类只有一个发生变化的原因,否则该类应该被拆分。实现:通过控制类的粒度大小原创 2022-04-02 11:57:00 · 485 阅读 · 0 评论