设计模式
文章平均质量分 72
luxray_m
Ai赛博绘画
展开
-
《设计模式之禅》-解释器模式
解释器模式是一种按照规定语法进行解析的方案,在现在的项目中使用比较少定义给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子AbstractExpression 抽象解释器具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NenterMinalExpression 完成TerminalE...原创 2019-07-28 21:44:14 · 269 阅读 · 0 评论 -
《设计模式之禅》-安全的备份管理
备份应该是完全,不能被修改的,它保证数据的洁净,避免数据污染而使备份失去意义,也就是说需要缩小备份出的备忘录的阅读权限,保证只能是发起人可读就可以了,这时候我们就可以使用内置类建立一个空的接口IMemento——什么方法属性都没有的接口,然后再发起人Originator类中建立一个内置类,Memento实现IMemento接口,同时实现自己的业务逻辑发起人角色public c...原创 2019-07-23 22:48:19 · 479 阅读 · 0 评论 -
《设计模式之禅》-观察者模式的扩展
java 中已经有观察者模式的相关Api在java.util包中观察者 java.util.Observer被观察者 java.util.Observablejava.util.Observable.notifyObservers()方法相关源码public void notifyObservers(Object arg) { /* * ...原创 2019-07-18 23:44:33 · 152 阅读 · 0 评论 -
《设计模式之禅》-适配器模式的扩展
当源角色有多个时,因为java不支持多继承,适配器角色则需要使用类关联的实现方法目标角色public interface Target { //目标角色有自己的方法 public String request1(); public String request2(); public String request3();}源角色1p...原创 2019-07-11 23:34:09 · 247 阅读 · 0 评论 -
《设计模式之禅》-组合模式2
组合模式:组合模式又称为合成模式,有时又叫部分-整体模式是,主要用来描述部分和整体的关系定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单一对象和组合对象的使用具有一致性组合模式的三个角色1.Component抽象构件角色定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性,比如在27.组合模式1中getInfo就封装到抽象类里面了...原创 2019-07-16 00:40:17 · 183 阅读 · 0 评论 -
《设计模式之禅》-浅拷贝与深拷贝
浅拷贝例子:public class Thing implements Cloneable{ private ArrayList<String> list = new ArrayList<>(); @Override public Thing clone(){ Thing thing = null; try {...原创 2019-07-01 00:06:12 · 154 阅读 · 0 评论 -
《设计模式之禅》-适配器模式
适配器模式定义将一个类的接口变换客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作适配器模式又称为变压器模式,也叫做包装模式,装饰模式也是包装模式的一种简单来说,适配器模式就是把一个接口或类转换成其他的接口或类适配器模式有三个角色1.Target目标角色该角色定义把其他类转换为何种接口,也就是我们的期望接口2.Adap...原创 2019-07-10 21:34:18 · 156 阅读 · 0 评论 -
《设计模式之禅》-组合模式-1
组合模式比较难理解,所以先看相关例子,本章节代码较多,需在git下载这是一个常见的数据库结构比较典型的树状结构(常见的还有菜单)一般的做法CEO我们认为是根节点developDep,developGroup,salesDep,fianceDep是树枝节点k,a,b则是树叶节点(树叶节点是最小的节点.不能延伸或者有分支)一般的做法是定义三个接口用来定义...原创 2019-07-15 00:25:25 · 222 阅读 · 0 评论 -
《设计模式之禅》-原型模式注意事项-构造函数不会执行
一个实现了Cloneable并重写了clone方法的类,通过重写的clone 方式克隆出来的对象是不会执行构造函数的public class Thing implements Cloneable{ public Thing(){ System.out.println("构造函数被执行了"); } @Override public Thing ...原创 2019-06-30 00:26:04 · 331 阅读 · 0 评论 -
《设计模式之禅》-策略模式
策略模式定义定义一组算法,将每个算法都封装起来,并且使它们之间可以互换策略模式有三个角色1.Strategy 抽象策略角色策略,算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。2.ConcreteStrategy具体策略角色实现抽象策略中的操作,该类含有具体的算法3.Context封装角色也叫做上下文角色,起承上启下封装作用,屏蔽高...原创 2019-07-09 23:22:37 · 222 阅读 · 0 评论 -
《设计模式之禅》-组合模式3
组合模式有两种不同的实现方法1.是透明模式2,是安全模式 之前的例子是安全模式其实透明模式就是把用来组合使用的方法放到了抽象类中,比如add(),remove()以及getChildren等方法(一般来说getChildren方法返回的是Iterable的实现类),不管叶子节点还是树枝节点都有相同的结构,通过判断getChildren的返回值确定是叶子节点还是树枝节点,如果处理不...原创 2019-07-16 23:14:26 · 193 阅读 · 0 评论 -
《设计模式之禅》-门面模式
门面模式也叫做外观模式,是一种比较常用的封装模式定义要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生简单来说,门面模式是外界访问子系统内部的唯一通道,不管子系统内部是多么杂乱无章,只要有门面模式在,就可以做到...原创 2019-07-19 23:10:53 · 190 阅读 · 0 评论 -
《设计模式之禅》-享元模式
享元模式是池技术的重要实现方式定义使用共享对象可有效地支持大量的细粒度对象享元模式的定义为我们提出了两个要求:细粒度的对象和共享对象我们知道分配太多的对象到应用程序中将有损程序的性能,同时还容易造成内存溢出那么怎么避免呢?那就是享元模式提到的共享技术,这里就设计到对象的内部和外部状态要求细粒度对象,那么不可避免地使得对象数量多且性质相近,那我们将这些对象的信息分为两个部分...原创 2019-07-29 22:46:12 · 240 阅读 · 0 评论 -
《设计模式之禅》-状态模式
状态模式定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样通用类图state 抽象状态角色接口或抽象类,负责对象定义,并且封装环境角色以实现状态切换ConcreteState 具体状态角色每一个具体状态必须完成两个职责:本状态的行为...原创 2019-07-27 21:38:30 · 199 阅读 · 0 评论 -
《设计模式之禅》-多状态的备忘录模式
一个javabean一般来说会有多个状态如果用之前的方法,就得写一大堆备份语句这显然是不现实也不可取的那么 我们可以用内省的方法进行bean的属性备份和还原,我们使用HashMap来进行存储状态发起人(javabean)public class Originator { private String state1 = ""; private String state2...原创 2019-07-23 00:10:53 · 201 阅读 · 0 评论 -
《设计模式之禅》-双分派的问题
说到访问者模式就不得不提一下双分派的问题,什么是双分派呢,我们先来解释一下什么是单分派和多分派。根据对象的类型而对方法进行的选择,就是分派(Dispatch)分派的类型一个方法所属的对象叫做方法的接收者,方法的接收者与方法的参量统称做方法的宗量。根据分派可以基于多少种宗量,可以将面向对象的语言划分为单分派语言和多分派语言。单元分派语言根据一个宗量的类型(真实类型)进行对方法的选择,...原创 2019-07-25 23:09:39 · 617 阅读 · 0 评论 -
《设计模式之禅》-桥梁模式
桥梁模式也叫做桥接模式,是一种比较简单的模式定义将抽象和实现解耦,使得两者可以独立地变化桥梁模式中的4个角色Abstraction——抽象化角色它的主要职责是定义出该角色的行为,同时保存一个队实现化角色的引用,该角色一般是抽象类Implementor——实现化角色它是接口或者抽象类,定义角色必须的行为和属性RefinedAbstraction——修正抽象...原创 2019-07-30 23:04:04 · 272 阅读 · 0 评论 -
《设计模式之禅》-备忘录模式扩展
clone模式就是配合原型模式,由一个类控制,备忘录的生产和恢复,由于是一个类包含了所有的功能,所以也不需要中转类备忘录管理员角色了//发起人自主备份和恢复public class Originator implements Cloneable { private Originator backup; private String state = ""; pub...原创 2019-07-21 23:43:21 · 156 阅读 · 0 评论 -
《设计模式之禅》-备忘录模式
备忘录模式通俗来讲,就是一个对象的备份模式,提供了一种程序数据的备份方法1.Oraiginator 发起人角色记录当前时刻的内部桩体,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据2.Memento备忘录角色负责存储Originator发起人对象的内部状态,在需要时提供发起人需要的内部状态3.Caretaker 备忘录管理员角色对备忘录角色进行管理,保存和提供...原创 2019-07-20 21:25:45 · 175 阅读 · 0 评论 -
《设计模式之禅》-访问者模式
访问者模式定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作visitor抽象访问者抽象类或者接口,声明访问者可以访问哪些元素,具体到程序就是visit方法的参数定义哪些对象可以被访问ConcreteVisitor 具体访问者它影响访问者访问到一个类后该怎么干,要做什么事Element 抽象元素接口或抽象...原创 2019-07-24 23:25:48 · 165 阅读 · 0 评论 -
《设计模式之禅》-观察者模式
定义:定义对象间一种一对多的依赖关系,是的每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新Subject 被观察者定义被观察者必须实现的职责,它必须能够动态地增加,取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者observer 观察者观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进...原创 2019-07-17 23:42:04 · 263 阅读 · 0 评论 -
《设计模式之禅》-享元模式的性能平衡
需要下载demodemo: https://gitee.com/minstrel01/Design-Pattern-demo.git flyweight_pattern在报考系统中,我们完全可以重新建立一个类作为外部状态,这样才完全符合面向对象编程的理念//外部类public class ExtrinsicState { //考试科目 private Stri...原创 2019-07-29 22:50:13 · 206 阅读 · 0 评论 -
懒汉模式-双重同步锁机制
懒汉模式 是在使用的时候才会生成对象public class Singleton{ private static Singleton singleton = null; //私有化构造函数,不能从外部生成 private Singleton(){ } public static Singleton getSingleton(){ if(...原创 2019-07-04 00:19:14 · 2321 阅读 · 1 评论 -
《设计模式之禅》-命令模式
命令模式定义:将一个请求对象封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志请求日志,可以提供命令的撤销和恢复功能命令模式主要有三种角色1.receive 接收者角色该角色就是干活的角色,命令传递到这里应该被执行2.commend命令角色需要执行的命令都在这里声明3.invoker调用者角色接收到命令,并执行命令通用...原创 2019-07-03 22:42:13 · 177 阅读 · 0 评论 -
《设计模式之禅》-原型模式
原型模式属于比较简单的设计模式,所以使用次数也非常的多定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式的通用代码:public class PrototypeClass implements Cloneable { @Override public PrototypeClass clone(){ PrototypeC...原创 2019-06-27 22:23:49 · 287 阅读 · 0 评论 -
《设计模式之禅》-建造者模式
建造者模式 又称为生成器模式(设计模式之禅 101-112页)定义:将一个复杂对象的构建与它的表示分开,使得同样的创建过程可以创建不同的表示在建造者模式中,有如4个角色Product 产品类通常是实现了模板方法模式,也就是有模板方法和基本方法Builder抽象创建者规范产品的创建,一般由子类实现。ConcreteBuilder具体创建者实现抽象类定义的...原创 2019-06-19 22:32:05 · 335 阅读 · 0 评论 -
《设计模式之禅》-工厂模式
工厂模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类通用代码://抽象产品类 (也可以是功能接口)public abstract class Product { //产品的公共方法 public void method1(){ //业务逻辑处理 } public abst...原创 2019-06-15 13:31:44 · 156 阅读 · 0 评论 -
《设计模式之禅》-单例模式
单例设计模式定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例通用代码:public class Singleton{ private static Singleton singleton = new Singleton(); //私有化构造函数,不能从外部生成 private Singleton(){ } p...原创 2019-06-14 16:56:52 · 146 阅读 · 0 评论 -
《设计模式之禅》-模板方法模式
模板方法定义:定义一个 操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤模板方法非常简单,仅仅只是使用了继承机制,但是其应用非常的广泛abstractClass 中的方法分为两类1.基本方法基本方法也叫基本操作,是由子类实现的方法,并在模板方法被调用2.模板方法可以有一个或者多个,一般是一个...原创 2019-06-18 22:42:08 · 156 阅读 · 0 评论 -
《设计模式之禅》-六大原则
1.单一职责原则:定义:应该有且仅有一个原因引起类的变更好处:1.类的复杂性降低,实现什么职责都有清晰明确的定义;2.可读性提高,复杂性降低;3.可维护性提高,可读性提高;4.变更引起的风险降低。变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性,维护性都有非常大的帮助2.里氏替换原则定义:只要...原创 2019-06-12 23:35:08 · 161 阅读 · 0 评论 -
《设计模式之禅》-代理模式
代理模式(委托模式)代理模式是一种使用率非常高的模式定义:为其他对象提供一种代理以控制对这个对象的访问代理模式一般由三个角色定义1.subject抽象主题角色抽象主题角色可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求2.realSubject具体主题角色也叫做被委托角色,被代理角色。是业务逻辑的具体执行者3.Proxy代理主题角色也...原创 2019-06-20 23:52:45 · 222 阅读 · 0 评论 -
《设计模式之禅》-工厂方法模式的扩展
1.静态工厂模式(简单工厂模式)其实就是去掉了抽象工厂类,然后定义一个工厂类的创建方法设置为静态方法简化了工厂类的创建public class Factory{ public static <T extends Product> T create(Class<T> c){ Product product = null; tr...原创 2019-06-17 16:10:13 · 133 阅读 · 0 评论 -
《设计模式之禅》-抽象工厂模式
抽象工厂模式定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类通用代码:抽象产品类://抽象产品类public abstract class AbstractProductA { //每个产品的共有方法 public void shareMethod () { } //每个产品相同方法,不同实现 ...原创 2019-06-17 23:28:20 · 196 阅读 · 1 评论 -
《设计模式之禅》-强制代理
强制代理强制代理在设计模式中比较另类,一般的思维都是通过代理找到真实的角色,而强制代理则却是要“强制”,必须通过真实角色查找到代理角色,否则不能访问不论是通过代理类还是直接new一个主题角色类,都不能访问,必须通过真实角色指定的代理类才能访问,也就是说由真实角色管理代理角色。这么说吧,高层模块new一个真实角色对象,但是返回的是代理角色。这好比,你去找明星帮忙,明星叫你去找经纪人...原创 2019-06-25 00:02:30 · 220 阅读 · 0 评论 -
《设计模式之禅》-装饰者模式代码
//Component抽象构件public abstract class SchoolReport { public abstract void report(); public abstract void sign(String name);}//ConcreteComponent具体构件 被装饰角色public class FouthGradeSchoolRep...原创 2019-07-08 23:04:25 · 204 阅读 · 0 评论 -
《设计模式之禅》-装饰模式
定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生产子类更为灵活装饰模式有四个角色1.Component抽象构件Component是一个接口或是抽象类,就是定义我们最核心的对象,也就是最原始的对象。注意:在装饰模式中。必然有一个最基本,最核心,最原始的接口或者抽象类充当Component抽象构件2.ConCreteComponent具体...原创 2019-07-08 22:55:38 · 208 阅读 · 0 评论 -
《设计模式之禅》-中介者模式
中介者模式定义:用一个中介对象封装一系列的对象交互,中介者使各个对象不需要显示地互相作用,从而使其耦合松散,而且可以独立地改变它们之间的交互中介者模式主要分为三个部分mediator抽象中介者角色抽象中介者角色定义统一的接口,用于各同事角色之间的通信concrete mediator 具体中介者具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于...原创 2019-07-03 00:49:46 · 184 阅读 · 0 评论 -
《设计模式之禅》-动态代理
动态代理是在实现阶段不用关心代理谁。而在运行阶段才指定代理哪一个对象,相对而言,自己写的代理方式就是静态代理具体代码:InvocationHandler接口是jdk自带的代理接口//动态代理类 需要实现invoke方法,完成对真实方法的调用public class GamePlayIH implements InvocationHandler { //被代理的实例 Ob...原创 2019-06-27 00:25:29 · 170 阅读 · 0 评论 -
《设计模式之禅》-责任链模式
责任链模式定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止责任链模式的重点在“链”上面,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果。责任链模式的核心在“链”上,“链”是由多个处理者ConcreteHandler组成的具体代码如下//抽象处理者p...原创 2019-07-07 22:28:05 · 203 阅读 · 0 评论 -
《设计模式之禅》-普通代理
网络上代理服务器分为透明代理和普通代理透明代理用户不用设置代理服务器地址,就可以直接访问,也就是说代理服务器对用户来说是透明的,不用知道它的存在普通代理需要用户自己设置代理服务器的IP地址,用户必须知道代理的存在。设计模式中普通代理和强制代理也是一种类似的结构,普通代理就是我们要知道代理的存在,也是得知道proxy类的存在,才能访问。而强制代理则是调用者直接调用真实的角色。而不...原创 2019-06-22 22:04:34 · 122 阅读 · 0 评论