设计模式学习
小宏ye
这个作者很懒,什么都没留下…
展开
-
设计模式-迭代器模式
总结一下迭代器模式的流程思路: 首先Iterator接口或抽象类中定义关键的isDone()遍历是否结束方法以及一个next()如何遍历的方法, 由子类实现Iterator的这两个方法,并将Aggregate类装入ConcreteIterator,进行遍历操作,而需要选择遍历方法,只需要重新编写一...原创 2019-02-12 15:56:13 · 123 阅读 · 1 评论 -
设计模式-策略模式
假设对于商场系统中“正常收费”、“满300返100”、“打8折”,都是对价格处理的算法,而它们具有公共功能(处理价格之后返回),那么如果按照面向过程中写如下: switch(String type){ case "正常收费": return ...; case "300返利100": return ...; case "打8折": return ...; } 一个类就可以搞定了,但...原创 2019-01-10 16:06:32 · 73 阅读 · 0 评论 -
设计模式-观察者模式与委托
使用动机: 举个例子来说(不要钻牛角尖):红绿灯就是一个依赖于Subject的ConcreteSubject具体通知者,而车辆行人就是各个依赖于抽象Observer观察者类,当灯变色时,红绿灯调用车辆行人的update()方法其实都可以叫做run()方法,而车辆行人再根据红绿色的当前状态执行下一步行动,就而已做到。 如此,通知者和观察者都依赖于抽象,很好的实现了“依赖倒置”原则,在...原创 2019-01-16 14:57:53 · 230 阅读 · 0 评论 -
设计模式-抽象工厂模式、简单工厂模式、工厂方法模式
工厂方法模式举个例子来说,加减乘除4个具体运算类(ConcreteProduct)其实就是依赖于抽象运算类(Product),而返回加减乘除具体运算类,又是由依赖于抽象运算工厂类(Creator)的加减乘除4个工厂类(ConcreteProd...原创 2019-01-17 14:51:17 · 122 阅读 · 0 评论 -
设计模式-享元模式
设计思路分析: 将公共的部分提取出来Flyweight抽象类,并由FlyweightFactory工厂进行初始化,当需要大量调用此类对象时,直接对工厂类进行调用获取引用。 其实这个模式就是跟我们平常写的一些公共类一样,只不过正常情况下我们是直接new或者注入,这个模式就是通过抽象由工厂分配,当大量使用某些对象会发生很大的开销的情况下,可以使用这个模式。 外部状态与内...原创 2019-02-15 17:15:46 · 170 阅读 · 0 评论 -
设计模式-命令模式
设计思路:设计命令抽象类Command,实现该抽象类ConcreteCommand定义具体的命令内容,初始化命令执行者Receiver,由Invoker对Command类型进行操作,这样就可以对每一个命令(请求)进行额外的操作比如(撤销操作,记录日志等等),就把命令的具体执行内容与执行者分离开来,执行者代码中无法知道具体有多少条命令,只管执行,单...原创 2019-02-13 11:47:33 · 144 阅读 · 0 评论 -
设计模式-职责链模式
设计思路:自己装自己 根据条件选择自己 使用场景:跟职责链名字一样,当需要进行一个顺序执行的情况下,那么各个环节耦合开来,当需要切换环节时,只需要更改某环节中的执行类即可。 总结自《大话设计模式》-职责链模式...原创 2019-02-13 15:44:23 · 128 阅读 · 0 评论 -
设计模式-状态模式
状态模式(state):当一个对象的内在状态改变时其行为,这个对象看起来像是改变了其类。 简单来理解,当使用多个条件判断(if else),而这个条件判断之后处理的都是同一个对象的不同的行为,当这个判断过于复杂时,可以使用状态模式进行简化(说是简化,其实就是将多个判断分为几个类分开调用),这样如果当需求变更的时候,改动的地方不会太大,并且方便后续维护。 上图中 ConcreteSta...原创 2019-01-08 17:16:29 · 98 阅读 · 0 评论 -
设计模式-建造者模式
总结来说:电脑主机生产,简单来看,不过是cpu,内存,主板,显卡,电风扇,电源等等组件进行组装,而把这些组件当成一个个具体产品Product,抽象类Builder也就是固定好必须装 cpu,内存,主板,显卡,电风扇,电源等等方法,型号A类即依赖于Builder的具体建造者ConcreteBuilder,当然了型号B也是具体建造者,不过各个型号之间的各个组件肯定不一样,而后由生...原创 2019-01-12 19:05:15 · 76 阅读 · 0 评论 -
设计模式-外观模式
使用的动机:一、在我们编写代码的时候,大部分都会将不同的层次细分,那么增加一个中间者Facade,可以减少各层次之间的耦合,方便调用。 二、在系统的开发中,代码量增加,各个类间的耦合,可以在其中增加一个外观Facade,减少各自的依赖。 三、在重构粗糙高度复杂的遗留代码时,在不了解次模块下的各自细节,直接进...原创 2019-01-12 18:34:44 · 324 阅读 · 0 评论 -
设计模式-适配器模式与外观模式区别
第一眼看到适配器模式,我第一反应就是怎么跟外观模式有点像,仔细看完之后,发现做法上是不一样的。 针对适配器模式,笔记本电脑跟显示器需要一根转接线才能连接,而笔记本电脑或者显示器(Client)都依赖于转接线这个适配器(Adaptar),而转接线的两个接口(Target)分别适配笔记本电脑跟显示器的接...原创 2019-01-17 15:47:05 · 2565 阅读 · 0 评论 -
设计模式-备忘录模式
这里举个备忘录流程:首先创建一个Originator将需要保存的属性交由Caretaker保存一个版本(Memento),在进行一些操作之后需要回退上个版本,再将Caretaker.Memento通过SetMemento()方法设置之前保存的版本(Memento)。 具体实现代码参照: https://www.cnblogs.com/zyrblog/p/...原创 2019-01-18 11:43:55 · 70 阅读 · 0 评论 -
设计模式-装饰模式
当发现一个需求,比如是乐高积木,每一块木头都是动态进行添加摘除,那么如果为每一种组合都写一个类,那么这样的代码就是极为糟糕的,而如果使用装饰模式,将所有不同形状的木头都抽象为一个积木类,而通过“自己装自己的同类”,这个在多态上是允许的,那么当不同的组合,我只需要按照顺序装备出来,那么复用、灵活性上就得到很好的实现。比如JAVA数据流stream使用的就是装饰模式。 总结自:《大话设计...原创 2019-01-12 11:47:05 · 100 阅读 · 0 评论 -
设计模式-代理模式
代理类Proxy与被代理类RealSubject依赖于同一个抽象Subject,所以可以在Proxy基础上对代理类的访问做一些额外的功能。 应用场合 远程代理:具体举例还没有想到。 虚拟代理:因为proxy代理类跟被代理类都依赖于同一个抽象,那么当被代理类加载时间过长,可以暂存让proxy代理类替代被代理类的位置,比如HTML中,页面并不是同一时刻所有图片同时加载,而是动态加载,...原创 2019-01-12 12:02:41 · 81 阅读 · 0 评论 -
设计模式-工厂方式模式
更为直观的例子结构图 在简单工厂中,我们将switch写在“给运算工厂类的方法里”,当需要在添加其他算法时,需要去修改switch中的case分支,那么就不符合“开放-封闭”原则,而这个时候工厂方法就出现了。而这样,尽管第一次看上去会发现,代码量很繁琐,但是当后续的算法增加,那么我们需要增加一个运算类子类,一个该子类的工厂,然后在客户端进行调用,那么就将修改的部分放到了客户端上,对我...原创 2019-01-12 14:38:29 · 125 阅读 · 0 评论 -
设计模式-原型模式
使用场景:当一个对象需要在多处调用并且需要在其基础上做额外操作的时候,那么我们正常的逻辑,是new很多个对象,那么此时构造函数执行时,如果构造执行时间长,极为影响效率。原型模式就可以很好的做到clone,将对象的引用复制给下一个。 而JAVA中在需要复制的类实现Cloneable接口,调用clone()方法。 而这里又分为浅复制跟深复制 浅复制:被复制的对象的属性值(成员变量)全部复制...原创 2019-01-12 15:32:41 · 80 阅读 · 0 评论 -
设计模式-模板方法模式
这其实在我们平常的代码过程中,就已经经常用到这个模式,只是没有对这个方法进行总结。当我们编写一些功能时,多个子类的一些代码其实是相似的,那么就把他提取出来,放在父类,或者是一个公共类,这就是模板方法模式。其实设计模式就是对我们的代码编写的一些便捷方式的总结。 总结自:《大话设计模式》 模板方法模式...原创 2019-01-12 16:35:44 · 92 阅读 · 0 评论 -
设计模式-简单工厂模式
其实,在平常的代码中我们会时不时用到简单工厂模式,只是我们为了方便去做的,而并没有把这种模式总结起来。 照着上图,简单工厂类依赖于运算类,而加法、减法、乘法、除法都是运算类的子类,那么通过简单工厂类装载运算类,并通过封装、继承、多态,在工厂类中返回对应的子类调用同一个GetResult(),就能获取到不同的行为方式。 缺:简单工厂类中需要做判断返回相应的运算类,那么当需要加上新的类...原创 2019-01-08 18:03:13 · 89 阅读 · 0 评论 -
设计模式-中介者模式
中介者模式的优缺点 优点: 简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。 提供系统的灵活性,使得各个同事对象独立而易于复用。 缺点: 中介者模式中,中介者角色承担了较多的责任,所以一旦这个中介者对象出现了问题,整个系统将会受到重大的影响。 新增加一个同事类时,不得不去修改抽象中介者类和具体中介者...原创 2019-02-13 17:27:34 · 145 阅读 · 0 评论