设计模式
设计模式
苦杏仁
心无旁骛!
展开
-
设计模式-21-备忘录模式 Memento [又叫做快照模式 Snapshot Pattern] - [行为模式]
1.备忘录模式简介保存一个对象的[某个状态],以便在适当的时候[恢复对象]。备忘录模式属于行为型模式;意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。2.备忘录模式的角色Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。发起人可以根据需要决定Memento存储自己的哪些内部状态。 Memento(备忘录):负责存储 [发起人对象] 的内部状态。 Caretaker(...原创 2020-07-23 13:17:12 · 207 阅读 · 0 评论 -
设计模式-20-访问者模式 Visitor -[行为模式]
1.访问者模式的简介 将作用于某种数据结构中的各[元素的操作]分离出来[封装成独立的类],使其在[不改变数据结构]的前提下可以[添加作用于这些元素的新的操作],为数据结构中的每个元素提供多种访问方式;它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。2.访问者模式的角色抽象访问者(Visitor)-[访客]角色:定义一个访问具体元素的接口,为每个具体元素类(东家)对应一个访问操作(看人-不同的东家,不同的操作),该操作中的[参数类型]标识了被访问的具体元素(参数...原创 2020-07-22 18:13:21 · 132 阅读 · 0 评论 -
设计模式-19-策略模式 Strategy -[行为模式]
1.策略模式简单介绍定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。2.策略模式的角色环境类(Context):用来操作策略的上下文环境; 抽象策略类(Strategy):策略的抽象,出行方式的抽象; 具体策略类(ConcreteStrategy):具体的策略实现,每一种出行方式的具体实现。3.策略模式的简单运用咱..原创 2020-07-22 16:00:50 · 167 阅读 · 0 评论 -
设计模式-18-观察者模式 Observer -[行为模式]
1.观察者模式简介 观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.观察者模式角色抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象 具体主题(Concrete Subject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。 抽象观察者(Obser..原创 2020-07-22 11:04:17 · 119 阅读 · 0 评论 -
设计模式-17-解析器模式 Interpreter -[行为模式]
1.解析器模式简介给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。【属于行为类模式】“文法” : 指语言的语法规则 ; 解析器模式在现在项目中还是使用比较少的;2.解析器模式的角色Expression——抽象解释器:具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成。 TerminalExpression——终结符表达式:实现与文法中的元素相关联的解释操作,..原创 2020-07-21 19:46:43 · 169 阅读 · 0 评论 -
设计模式-16-责任链模式 Chain of Responsibility -[行为模式]
1.责任链模式简介(Chain of Responsibility) 定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。注意:责任链模式也叫职责链模式。 在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。2.责任链模式的角色抽象处理者(Handler...原创 2020-07-21 14:24:40 · 227 阅读 · 0 评论 -
设计模式-15-状态模式 State -[行为模式]
1.状态模式简介当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类;当状态改变时,这个对象的行为也会变,而看起来就像是这个类改变了一样。2.举例说明案例:城市的纵向发展离不开电梯,就以电梯为例。状态\动作 开门 关门 运行 停止 开门状态 X O X X 关门状态 O X O O 运行状态 X X X O 停止状态 O X...原创 2020-07-20 13:22:46 · 186 阅读 · 0 评论 -
设计模式-14-中介者模式 Mediator -[行为模式]
1.中介者模式简介 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。2.案例分析最典型的例子:租房中介没有中介的场景: 房东:有六个房东需要出租房屋,房屋各不相同、各有各的特点、适合不一样的人租住。 这六个房东之间刚好有点联系,然后都在出租房屋。 租客:这时租客A来租房,看了一号房东的房子不满意、但是一号...原创 2020-07-16 18:22:23 · 120 阅读 · 0 评论 -
设计模式-13-模板方法模式 Template method -[行为模式]
1.模板方法模式简介 它定义一个操作中的算法的框架,而将一些步骤延迟到了子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。 比如说做饭,同样的步骤不同的人做味道是不一样的。或者是造汽车,同样的步骤,造车厂商不一样,造出来的汽车质量不同。这就是模板方法模式。2.简单案例举个例子: 我们要做个西红柿炒鸡蛋吧;简单步骤如下:第一步:放油 [ 这个步骤是秘方-决定了口感-不能外泄 ]第二步:放西红柿第三步:放鸡蛋第四部:是否放青菜...原创 2020-07-15 17:40:17 · 102 阅读 · 0 评论 -
设计模式-12-命令模式 Command -[行为模式]
1.命令模式简介 命令模式关注动作本身,通过将动作封装成对象实现调用者和底层实现相分离。调用者只需要简单的下达命令,然后等待命令完成即可,对底层发生了什么完全不知情。 关于命令模式一个很直观的例子就是点餐:当我们点餐时,我们只用关心将选好的菜品下单,然后等待送餐即可,我们不关心饭菜是怎么做的,不关心厨师是男是女。2.简单示例我们要制作一个简易的遥控器,有两个控制灯开关的按钮,并有一个操作回退按钮。首先,我们先来定义一个接收者的角色:也就是最后执行动作的那个对象...原创 2020-07-15 14:37:24 · 115 阅读 · 0 评论 -
设计模式-10-适配器模式-[组合模式]
1.[组合模式] 是 [对象的适配器模式] 的衍生模式 组合模式:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。2.组合模式简介 组合模式(又称“部分-整体”模式)是一种结构型设计模式。组合模式的思想是:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性( 统计接口--不同实现 --- 对外表现一致[无差异调用] )。3....原创 2020-07-08 11:25:14 · 700 阅读 · 0 评论 -
设计模式-11-迭代器模式-[行为模式]
1.迭代器模式简介迭代器模式:属于设计模式中的【行为模式】简单介绍:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。举例:分别访问List、Array、Map 、Set 等集合的方式是不同的,通过迭代器模式可以提供一种统一的方式实现顺序访问集合中的各个元素;2.具体案例分析假设有个快餐店请人做了一套系统;早点供应系统-菜单用 List 数据结构存放数据;运行一段时间后效果非常好,于是又请人升级系统添加了 午餐供应模块-原创 2020-07-14 11:29:51 · 144 阅读 · 0 评论 -
设计模式-09-适配器模式-[享元模式]
1.[享元模式] 是 [对象的适配器模式] 的衍生模式2.享元模式简介享元模式:是池技术的重要实现方式,使用共享对象可有效地支持大量的细粒度的对象,可以避免大量非常相似的类的开销;3.简单案例分析 案例:公司某部门给员工评优秀员工-很贴合实际哈;抽象享元角色:/** * 抽象享元角色 */public abstract class A1_Flyweight { //内部状态 部门 private String department="公司总部"...原创 2020-07-03 17:36:47 · 107 阅读 · 0 评论 -
设计模式-08-适配器模式-[门面模式/外观模式]
1. [门面模式/外观模式] 是 [对象的适配器模式] 的衍生模式2.[门面模式/外观模式] 简介 外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口。客户在使用系统时不必和子系统打交道了,降低了客户和子系统间的耦合。 简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只关心结果即可。这个场景其实在日常开发中使用的频率还是非常高的; ...原创 2020-07-03 09:42:05 · 491 阅读 · 0 评论 -
设计模式-07-适配器模式-[代理模式]
1. [代理模式] 是 [对象的适配器模式] 的衍生模式2.代理模式简介 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法; 3.代理模式分类静态代理 动态代理 Cglib代理4.代理...原创 2020-07-01 09:52:27 · 117 阅读 · 0 评论 -
设计模式-06-适配器模式-[桥接模式]
1. [桥接模式] 是 [对象的适配器模式] 的衍生模式2.桥接模式简单介绍 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。 ...原创 2020-06-18 10:24:01 · 138 阅读 · 0 评论 -
设计模式-05-适配器模式-[装饰模式]
1. [装饰模式] 是 [对象的适配器模式] 的衍生模式正在完善中。。。。。。。。原创 2020-06-16 18:44:17 · 89 阅读 · 0 评论 -
设计模式-04-适配器模式
1.适配器模式简介 适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 用电器来打个比喻:有一个电器的插头是三脚的,而现有的插座是两孔的,要使插头插上插座,我们需要一个插头转换器,这个转换器即是适配器。 2.适配器的三种模式 实现一个适配器,适配器实现...原创 2020-06-10 09:55:02 · 216 阅读 · 0 评论 -
设计模式-00-概述
一、概述 思维导图 GoF(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides)1.1、设计模式遵循的原则有6个1、开闭原则(Open Close Principle) 对扩展开放,对修改关闭。2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用转载 2020-06-06 14:37:40 · 177 阅读 · 0 评论 -
设计模式-03-建造者模式
建造者模式能够将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。这句话理解起来可能有点抽象,简单来说就是调用相同的创建对象的方法(建造过程)可以创建出不同的对象。案例说明:我们需要创建机器人-特征(头、身体、手、脚),需要根据模型创建出不同类型的机器人;简单粗暴-直接上代码:步骤1:先创建一个机器人模型-所有的机器人都应该有这些特征(有头,有身体,有手,有脚)public class Robot { private String head...原创 2020-06-02 18:14:40 · 136 阅读 · 0 评论 -
设计模式-02-工厂模式
1.工厂模式分类1.1 普通工厂模式1.2 多个工厂方法模式1.3 静态工厂方法模式1.4 抽象工厂模式2.直接上代码 - 公共部分public interface Sender { void Send();}public class SmsSender implements Sender { @Override public void Send() { System.out.println("发送短信内容"); }}原创 2020-05-29 15:15:32 · 178 阅读 · 0 评论 -
设计模式-01-Java实现单例模式的9种方法
一. 什么是单例模式因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。二. 单例模式的特点1. 单例模式只能有一个实例。2. 单例类必须创建自己的唯一实例。3. 单例类必须向其他对象提供这一实例。三. 单例模式VS静态类在知道了什么是单例模式后,我想你一定会想到静态类,“既然只使用一个对象,为何不干脆使用静态类?”,这里我会将单例模式和静态类进行一个比较。1. 单例可以继承和被继承,方法可以被override,而静态方法不可转载 2020-05-19 17:25:25 · 144 阅读 · 0 评论