
设计模式
慕思m
进无止境 有始无终
展开
-
访问者模式
访问者模式1 定义2 结构图3 代码实现4 优缺点及适用场景1 定义访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各个元素的操作表示,它使我们可以在不改变个元素的类的前提下定义作用于这些元素的新操作.2 结构图Vistor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或参数类型可以清除知道...原创 2020-04-05 18:08:59 · 339 阅读 · 0 评论 -
模板方法模式
模板方法模式1 定义2 结构图3 代码实现4 优缺点及适用场景1 定义模板方法模式:定义一个操作算法中框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构既可定义该算法的某些特定步骤.2 结构图1)AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations).这些基本操作可以是具体的,也可以是抽象的,每一个基本操作...原创 2020-04-05 14:45:42 · 109 阅读 · 0 评论 -
策略模式
策略模式1 定义2 结构图3 代码实现4 优缺点及适用场景1 定义策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让他们可以相互替换,策略模式让算法独立于使用它的客户而变化,也成为政策模式(Policy).2 结构图Context(环境类):环境类是使用算法的角色,它在解决某个问题时可以采用多种策略.在环境中维持一个对抽象策略类的引用实例,用于定义...原创 2020-04-05 13:16:39 · 354 阅读 · 0 评论 -
状态模式
状态模式1 定义2结构图3 代码实现4 具体案例5 优缺点及适用场景1 定义状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了其他的类.2结构图Context(环境类):环境类又称为上下文类,它是拥有多种状态的对象.由于环境类的状态存在多样性且在不同状态下对象的行为有所不同,因此将状态独立出去形成单独的状态类.State(抽象状态类...原创 2020-04-04 15:34:15 · 288 阅读 · 0 评论 -
观察者模式
观察者模式1 定义2 结构图3 代码实现4 优缺点及适用场景1 定义观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式的别名包括发布-订阅(Publis/Subscribe)模式,模型-视图(Model/View)模式,源-监听器模式(Source/Listener)或者从属者模式(...原创 2020-04-03 19:17:33 · 151 阅读 · 0 评论 -
备忘录模式
备忘录模式1 备忘录模式定义2 备忘模式结构图3 代码实现4 优缺点及适用场景1 备忘录模式定义备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.2 备忘模式结构图Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复...原创 2020-04-03 12:53:31 · 145 阅读 · 0 评论 -
中介者模式
中介者模式1 定义2 中介者模式结构图3 代码实现4 适用场景及优缺点1 定义中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。2 中介者模式结构图3 代码实现4 适用场景及优缺点...原创 2020-04-03 12:54:29 · 187 阅读 · 0 评论 -
迭代器模式
迭代器模式1 定义2 迭代器模式结构图3代码实现4 具体实例1 定义**迭代器模式(Iterator Pattern):**提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。2 迭代器模式结构图Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的firs...原创 2020-03-31 19:34:39 · 216 阅读 · 0 评论 -
解释器模式
解释器模式1 定义2 解释器模式结构图3 代码实现4 具体实例5 优缺点及适用场景1 定义解释器模式:定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的"语言"是指适用规定格式和语法的代码.解释器模式是一种类行为型模式.2 解释器模式结构图AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类...原创 2020-03-15 19:51:53 · 110 阅读 · 0 评论 -
命令模式
命令模式1 定义2 命令模式结构图3 代码实现4 具体实例5 优缺点及适用场景1 定义命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式2 命令模式结构图Command(抽象命令类...原创 2020-03-15 19:51:19 · 242 阅读 · 0 评论 -
享元模式
享元模式(Flyweight Pattern):运用共享技术有效的支持大量细粒度对象的复用.系统只是用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用.由于享元模式要求能够共享的对象必须是细粒度的对象,因此它又称轻量级模式,是一种对象结构型模式.例子:如下图所示开发一个围棋软件,棋子的形状,大小都一样,只是位置不通,其效果图如下:代码如下:abstract class I...原创 2020-03-15 19:50:10 · 93 阅读 · 0 评论 -
外观模式
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。外观模式结构图:外观模式实现Class SubSystemA{ public void meth...原创 2020-03-15 19:49:35 · 130 阅读 · 0 评论 -
职责链模式
职责链模式1 定义2 职责链模式结构图3 代码实现4 优缺点及适用场景1 定义职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。2 职责链模式结构图Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不...原创 2020-03-15 19:50:51 · 135 阅读 · 0 评论 -
装饰者模式
装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在...原创 2020-03-04 14:37:13 · 196 阅读 · 0 评论 -
代理模式
代理模式定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。代理模式是一种对象结构型模式.在代理模式中引入了一个新的代理对象, 代理对象在客户端和目标对象之间起到中介的作用,它去掉客户端不能看到的内容和服务或者增添客户需要的额外的服务.代码示例如下:abstract class Subject{ public abstract void request();}cl...原创 2020-01-21 16:17:19 · 286 阅读 · 0 评论 -
组合模式
组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。组合模式结构图...原创 2020-01-16 20:28:16 · 193 阅读 · 0 评论 -
桥接模式
桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继...原创 2020-01-16 19:19:34 · 292 阅读 · 0 评论 -
适配器模式
相关概念Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类Adapter(适配器类):适配器可以调用另外一个接口,转为转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个adaptee对象使两者产生联系Adaptee(适配者类):适配者即被适配的角色,适配者一般是一个具体的类,...原创 2020-01-14 20:32:58 · 303 阅读 · 0 评论 -
建造者模式
建造者模式:是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性Productpublic class Product ...原创 2020-01-14 19:12:28 · 271 阅读 · 0 评论 -
原型模式
相关概念原型模式:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程值类型:int double byte boolean char等简单数据类型引用类型:类,接口,数组等复杂类型浅克隆如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成...原创 2020-01-14 19:00:34 · 185 阅读 · 0 评论 -
单例模式
1 饿汉式单例模式public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton(){} public static EagerSingleton getInstance(){ ...原创 2020-01-14 18:49:09 · 180 阅读 · 0 评论 -
设计模式--面向对象设计原则
单一职责原则一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。单一职责原则是实现高内聚、低耦合的指导方针,是最简单却最难运用的原则,需要设计人员发现类的不同职责并将其分离开闭原则软件实体应当对扩展开放,对修改关闭。指软件实体应尽量在不修改原有代码的情况下进行扩展。里氏代换原则所有引用基类的地方必须能透明地使用其子类的对象。里氏替换原则表明,在软件中将一个基类对象替换成它的子...原创 2020-01-14 18:43:42 · 149 阅读 · 0 评论 -
工厂模式
1 普通工厂模式提供一个创建对象实例的功能,而无需关心其具体实现.被创建的实例类型可以是接口,抽象类也可以时具体的类.产品接口类public interface IProduct { void out();}产品实现类public class Product1 implements IProduct { public void out(){ Syste...原创 2019-09-14 00:09:01 · 98 阅读 · 0 评论 -
观察者模式
1 观察者模式又称发布订阅模式,是对象的行为模式.观察者模式定义了一种一对多的依赖关系,让多个观察者同时监视着被观察者的状态,当观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己.2 代码实例1)被观察者import java.util.ArrayList;import java.util.List;import java.util.Observable;import jav...原创 2019-09-13 21:50:58 · 126 阅读 · 0 评论 -
java责任链模式
当一个对象在一条链上被多个拦截器拦截处理时,我们这样的设计模式称为责任链模式,它用于一个对象在多个角色中传递的场景.1)用jdk动态代理来实现一个拦截器的逻辑,首先定义一个拦截器接口Interceptor,如下:import java.lang.reflect.Method;/** * @Author:musi * @Date:2019/9/13 * @Description: */...原创 2019-09-13 21:16:15 · 359 阅读 · 0 评论 -
java动态代理
Java中的代理技术有JDK,CGLIB,Javassist,ASM,其中JDK,CGLIB较为常用.1 JDK动态代理1)Jdk代理是java.lang.reflect.*提供的方式,它必须借助一个接口才能产生代理对象,所以先定义接口,如下:public interface HelloWorld { public void syaHelloWorld();}2)提供一个实现类...原创 2019-09-13 21:03:12 · 169 阅读 · 1 评论