设计模式
文章平均质量分 58
常用设计模式详解
独行客-编码爱好者
本人从事互联网开发已经5年多了,对互联网相关技术有一定的了解。希望可以和各位同仁,在编码的路上共勉。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单一职责原则
1.基本介绍 对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A22.应用实例1)方案1package com.example.designpattern.singleresponsibility;public class SingleReponsibility1 { public static void main(String[] args) { ..原创 2021-08-08 19:52:08 · 159 阅读 · 0 评论 -
接口隔离原则(Interface Segregation Principle)
接口隔离原则(Interface Segregation Principle)基本介绍1)客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上2)类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。3)按隔离原则应当这样处理:将接口Interface1拆分为独立的几个接口(这里我们拆分成3个接口),类A和类C分别与他们需.原创 2021-08-08 19:50:27 · 244 阅读 · 0 评论 -
依赖倒转原则
依赖倒转原则(Dependence Inversion Principle)基本介绍:1)高层模块不应该依赖低层模块,二者都应该依赖其抽象2)抽象不应该依赖细节,细节应该依赖抽象3)依赖倒转(倒置)的中心思想是面向接口编程4)依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的原创 2021-08-08 19:48:10 · 134 阅读 · 0 评论 -
里氏替换原则
继承性的思考和说明1)继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。2)继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障3)问题提出:在编程中,如何正确的使用原创 2021-08-08 19:46:27 · 138 阅读 · 0 评论 -
开闭原则(OCP)
基本介绍:1)开闭原则(OpenClose Principle)是编程中最基础、最重要的设计原则2)一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节3)当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。4)编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则。代码实现;类图设计如下:package com.atguigu.principle.ocp;pub.原创 2021-08-08 19:44:20 · 359 阅读 · 0 评论 -
迪米特法则
基本介绍1)一个对象应该对其他对象保持最少的了解2)类与类关系越密切,耦合度越大3)迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息4)迪米特法则还有个更简单的定义:只与直接的朋友通信5)直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,..原创 2021-08-08 19:42:12 · 139 阅读 · 0 评论 -
UML 类图
https://www.bbsmax.com/A/A2dmgl04Je/https://plantuml.com/zh/class-diagramhttps://blog.csdn.net/weixin_42948873/article/details/90643278https://blog.csdn.net/HelloWorld998/article/details/90676496UML基本介绍1)UML --Unified modeling language UML (统一.原创 2021-08-08 19:39:21 · 192 阅读 · 0 评论 -
26 职责链模式
1.职责链模式基本介绍1)职责链模式(ChainofResponsibility Pattern),又叫责任链模式,为请求创建了一个接受者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。2)责任链模式通常每个接受者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依次类推。3)这种类型的设计模式属于行为型模式2.职责链模式的原理类图>对原理类图的说明-即(责任链模式的角色及职责)1)Handler:抽象的...原创 2021-08-08 19:31:29 · 184 阅读 · 0 评论 -
25 策略模式
1.策略模式基本介绍1)策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以相互替换,从模式让算法的变化独立于使用算法的客户2)这算法体现了几个设计原则:第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承2.策略模式类图3.策略模式应用(策略模式+Map字典)应用场景:物流行业中,通常会涉及到EDI报文(XML格式文件)传输和回执接收,每发送一份E原创 2021-08-08 19:27:21 · 198 阅读 · 0 评论 -
24 状态模式
1.状态模式基本介绍1)状态模式(StatePattern): 它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转化2)当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类2.状态模式原理类图>对原理类图的说明-即(状态模式的角色及职责)1)Context类为环境角色,用于维护State实例,这个实例定义当前状态2)State是抽象状态角色,定义一个接口封装与Context的一...原创 2021-08-08 19:22:20 · 125 阅读 · 0 评论 -
23 解释器模式
1.基本介绍1)在编译原理,一个算法表达式通过词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器2)解释器模式(InterpreterPattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)3)应用场景应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树一些重复出现的问题可以用一种简单的语言来表达一个简单语法.原创 2021-08-07 20:20:43 · 150 阅读 · 0 评论 -
22 备忘录模式
1.备忘录模式基本介绍基本介绍1)备忘录模式(MementoPattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态2)备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录里获取原来的数据进行恢复操作3)备忘录模式属于行为型模式2.备忘录模式的原理类图>对原理类图的说明-即(备忘录模式的角色及职责)1)originator:对象(需要保存状态的对象)..原创 2021-08-07 20:09:36 · 119 阅读 · 0 评论 -
21 中介者模式基本介绍
1.基本介绍1)中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引入,从而使其耦合松散,而且可以独立地改变它们之间的交互2)中介者模式属于行为型模式,使代码易于维护3)比如MVC模式,C(Controller控制器)是M(Model模式)和V (View视图)的中介者,在前后端交互时起到了中间人的作用。2.中介者模式的原理类图>对原理类图的说明-即(中介者模式的角色及职责)1)Med...原创 2021-08-07 20:05:25 · 332 阅读 · 0 评论 -
20 观察者模式
1.观察者模式原理> subject :登记注册、移除和通知1)registerObserver 注册2)removeObserver 移除3)notifyObservers()通知所有的注册的用户,根据不同需求,可以是更新数据,让用户来取,也可能是实时推送,> Observe:接收输入> 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,比如这...原创 2021-08-07 20:01:50 · 111 阅读 · 0 评论 -
19 迭代器模式
1.迭代器模式基本介绍基本介绍:1)迭代器模式(Iterator Pattern)是常用的设计模式,属于行为型模式2)如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。3)迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部结构。2.迭代器模式的原理类图原理类原创 2021-08-07 20:00:00 · 111 阅读 · 0 评论 -
18 访问者模式
1.访问者模式基本介绍1)访问者模式(VisitorPattern),封装一些作用于某种数据结构的各元素操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。2)主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题3)访问者模式的基本原理是:在被访问的类里面加一个对外提供接待访问者的接口4)访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作“污染”这些对象的类,可以选用访问者模式解决2..原创 2021-08-07 19:56:16 · 110 阅读 · 0 评论 -
17 命令模式
1.命令模式基本介绍1)命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计2)命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。3)在命名模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持可撤销的操作。4)通俗易懂的理解:将军发布命令原创 2021-08-07 19:53:32 · 137 阅读 · 0 评论 -
15 代理模式
1.代理模式(Proxy)1.1代理模式的基本介绍1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。3)代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,它是属于动态代理的范畴)。4)代理模式示意图..原创 2021-08-07 19:00:29 · 130 阅读 · 0 评论 -
14 享元模式
1.展示网站项目需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:1)有客户要求以新闻的形式发布2)有客户人要求以博客的形式发布3)有客户希望以微信公众号的形式发布2.传统方案解决网站展现项目1)直接复制粘贴一份,然后根据客户不同要求,进行定制修改2)给每个网站租用一个空间3)方案设计示3.传统方案解决网站展现项目-问题分析1)需要的网站结构相似度很高,而且都不是高访问量网站,..原创 2021-08-07 18:46:21 · 107 阅读 · 0 评论 -
13 外观模式
1.影院管理项目组建一个家庭影院:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机、要求完成使用家庭影院功能,其过程为:直接用遥控器:统筹各设备开关开爆米花放下屏幕开投影仪开音响开DVD,选dvd去拿爆米花调暗灯光播放观影结束后,关闭各种设备2.传统方式解决影院管理13.3传统方式解决影院管理问题分析1)在ClientTest的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的...原创 2021-08-07 18:34:30 · 133 阅读 · 0 评论 -
11 装饰者模式
1.装饰者模式定义1)装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(OCP)2)这里提到的动态的将新功能附加到对象和OCP原则2.装饰者模式原理1)装饰者模式就像打包一个快递主体:陶瓷、衣服(Component)//被装饰者包装:报纸填充、塑料泡沫、纸板、木板(Decorator)2)Component主体:比如类似前面的Drink3)ConcreteComponent和Decorator (Con...原创 2021-08-06 14:45:22 · 143 阅读 · 0 评论 -
10 桥接模式
1.手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:2.传统方案解决手机操作问题3.传统方案解决手机操作问题分析1)扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。2)违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。3)解决方案-使用桥接模式4.桥接模式(Bridge)-基本介绍原创 2021-08-06 14:13:44 · 73 阅读 · 0 评论 -
5 建造者模式
1.盖房项目需求1)需要建房子:这一过程为打桩、砌墙、封顶2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不同3)请编写程序,完成需求2.传统方式解决盖房需求1)2)看老师代码的演示package com.example.designpattern.builder;public abstract class AbstractHouse { //打地基 public abstract void build原创 2021-08-06 13:56:01 · 99 阅读 · 0 评论 -
4 适配器模式
1.基本介绍1)适配器模式(AdapterPattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)2)适配器模式属于结构型模式3)主要分为三类:类适配器模式、对象适配器模式、接口适配器模式2.工作原理1)适配器模式:将一个类的接口转换成另一种接口。让原本接口不兼容的类可以兼容2)从用户的角度看不到被适配者,是解耦的3)用户调用适配器转化出来的目标接..原创 2021-08-06 13:50:49 · 126 阅读 · 0 评论 -
2 工厂模式
简单工厂模式:需求:1)披萨种类(GreekPizz、CheesePizza)等2)prepare,bake,cut,box3)完成披萨店订购功能使用传统方式:1)思路分析(类图)代码:public class PizzaProducer1 { private Pizza pizza; public PizzaProducer1( String orderType) { System.out.println("produc原创 2021-08-06 12:43:01 · 103 阅读 · 0 评论 -
1 单例设计模式
单例设计模式介绍所谓类的单例设计模式,就是采用一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)比如Mybaties的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这时就会使用到单例模式。单例设计模式的八种方式:1)饿汉式(静态常量)2)饿汉式(静态代码块)原创 2021-08-06 12:38:20 · 119 阅读 · 0 评论
分享