![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
weixin_43060721
这个作者很懒,什么都没留下…
展开
-
结构模式---适配器模式
适配器模式适配器模式多用于接口之间的转化,比如家用三头插座,想插一个两头插头,怎么办,买一个三头转两头的转换器就可以了,这个三头转两头的转换器就是适配器 类图: 被适配者(三头)public class Adaptee { private String fireLine; private String zeroLine; private String gro...原创 2018-08-30 19:50:50 · 151 阅读 · 0 评论 -
结构模式---访问者模式(visitor模式)
访问者模式访问者模式解决研发一个jar包,但因为新需求来了,又不想动原来的jar包,如果原来的jar包是按照访问者模式进行设计的,就可以做到不动jar包加代码(有些代理的影子) 这个类图乍一看像桥接,感觉好像也是解决两个维度问题,但比桥接多了一个ObjectStructure,这个ObjectStructure中持有了所有的Element(已经写好jar包的类),并且通过showElem...原创 2018-09-06 21:14:28 · 133 阅读 · 0 评论 -
结构模式---观察者模式
观察者模式观察者模式主要解决事件监听器和发布订阅模式问题 类图: 如果一个主题只有一个观察者,观察者模式就是事件监听器 如果一个主题只有多个观察者,观察者模式就是发布订阅 观察者:public interface Observer { public void update(); public void subscribeTo(Subject subject);...原创 2018-09-06 20:10:39 · 232 阅读 · 0 评论 -
六大原则和设计模式列表
六大原则:单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展里氏代换原则(Liskov Subst...原创 2018-09-09 16:37:08 · 582 阅读 · 0 评论 -
结构模式---动态代理
动态代理动态代理是相对静态代理(https://blog.csdn.net/weixin_43060721/article/details/82313877)而言,java动态代理是基于自动生成class文件字节码,然后将字节码动态(运行期而非编译器)加载到classloader,然后调用接口其实是调用字节码的代理类的对象的方法;相比于静态代理而言,不需要提前将类进行配置好,并且可以服务多个接...原创 2018-09-03 21:05:34 · 106 阅读 · 0 评论 -
行为模式---备忘录模式
备忘录模式备忘录模式主要解决那些需要记录状态(数据)的类,恢复状态的问题,这个和状态模式有些类似,状态模式解决状态之间流转问题,即状态流转是事先固定在状态类内部的;备忘录解决的类的某一时刻状态的记录,其实也就是类在某一时刻的数据,而数据的变化不是事先固定的,有一定的不确定性并且不需要流转,但需要数据全面 类图: 原发类: 可以使用内部类方式(黑盒方式,不暴露自己数据结构),也可以使用...原创 2018-09-05 21:45:12 · 154 阅读 · 0 评论 -
行为模式---中介者模式
中介者模式中介者模式解决将网状类图变为星状类图的过程,即原来每个类之间通信都需要持有对方,现在大家都不需要持有对方了,只需要持有中介者,而中介者持有大家即可 网状类图: 使用中介者模式后变为的星状类图: 其中AbstractColleague只是为了让每个子类进行Mediator设置而已,如图所示现在各个Colleague类编程了星状关系,所有的Colleague之间相互通信都需...原创 2018-09-05 21:10:44 · 142 阅读 · 0 评论 -
结构模式---享元模式
享元模式是为了解决创建大量重复对象问题,注意此处一定是重复对象,重复对象:即除了堆栈的地址不一样外其他的数据和结构完全一样的对象 类图: 享元类:public interface FlyWeight { public void print();}//对于这个具体享元对象而言只要id一样则它对外展现就是一样的,因为name是通过id生成了,而整个对象只有一个print方法...原创 2018-09-02 11:46:27 · 110 阅读 · 0 评论 -
结构模式---外观模式和静态代理
外观模式外观模式解决的是复杂系统的问题,将复杂系统的多个步骤封成一个步骤对外呈现,减少客户端的操作,比如说一个家里有电视,冰箱,电灯,我回家需要把这些依次打开,如果有一个开关,这个把这三都开了多好,这个总开关就是外观;外观模式主要是省略了交互,原先客户端需要和电视,冰箱,电灯都交互才能完成全部动作,现在只需要和外观类交互即可 外观模式可以将类图1转化为类图2 类图1: 类图二: ...原创 2018-09-02 11:15:14 · 186 阅读 · 0 评论 -
行为模式---迭代器模式(游标模式)
迭代器模式主要用来解决遍历集合问题,也可以使用foreach进行遍历,这里主要举例使用如何使用java的Iterable和Iterator实现迭代器模式 类图 此图省略了两个接口类 可迭代类:import java.util.Iterator;public class BookShelf implements Iterable<Book> { privat...原创 2018-09-04 21:47:19 · 233 阅读 · 0 评论 -
行为模式---模板方法
模板方法:解决主代码框架已定,而部分逻辑可替换问题,所以模板方法只能用抽象类来实现 类图: 模板类:public abstract class Template { //子类重写此方法 protected abstract void print(String message); //主代码框架已定,只是print方法的实现多态到子类中 public v...原创 2018-09-04 21:25:54 · 116 阅读 · 0 评论 -
行为模式---责任链模式
责任链模式责任链模式主要解决消息逐级传递问题,直到传递到可以解析此消息的处理者为止,比如java web的消息过滤器 类图: 其中FilterChain不是必须的,这里为了演示java web的Filter加入的 处理者:public interface Filter { public void doFilter(String request, FilterChain f...原创 2018-09-04 21:09:24 · 197 阅读 · 0 评论 -
创建模式---建造者模式
建造者模式适合创建复杂对象 类图: 产品类:public class Product { private String partA; private String partB; private String partC; public void setPartA(String partA) { this.partA = partA; ...原创 2018-08-28 22:37:29 · 116 阅读 · 0 评论 -
创建模式---单例模式和原型模式
单例模式单例模式即只有一个对象的类模式 使用简单工厂的方式实现: 最常使用的单利模式,懒加载模式:public class Product { public static Product product; private Product() { } public static Product getInstance() { if ...原创 2018-08-28 20:49:19 · 204 阅读 · 0 评论 -
创建模式---静态工厂,工厂方法和抽象工厂
静态工厂静态工厂也叫简单工厂,类图如下 产品类:public interface Product { public void print();}public class ConcreteProduct implements Product { @Override public void print() { System.out.printl...原创 2018-08-28 20:22:46 · 275 阅读 · 0 评论 -
结构模式--组合模式
组合模式组合模式特别适合处理那种整体和部分抽象为统一体的问题,比如目录接口(java中的File类即可以表示路径,也可以表示文件),树状接口(树枝和树叶) 组合模式的核心在于部分和整体的抽象为同一物体,至于抽象之后有什么需求再加相应的方法,下边是一个有遍历需求的组合模式定义,因为需要组合成一棵树和遍历,所以需要在接口添加getChildren和addChild方法,组合模式考虑给接口添加什么...原创 2018-08-30 22:40:43 · 115 阅读 · 0 评论 -
行为模式---策略模式和状态模式
策略模式状态模式策略模式和状态模式对比策略模式策略模式类图: 策略模式重在抽象行为,即将行为抽象为具体的类,调用的时候动态选择行为,策略模式不同策略之间可以相互替换,并不影响最终结果,比如定义不同算法,不同算法之间虽然逻辑不同,但要求执行结果一样,所以策略模式多用于封装算法Strategy 类,定义行为:public interface St...原创 2018-08-27 21:42:34 · 1758 阅读 · 0 评论 -
结构模式---桥接模式和装饰者模式
桥接模式桥接模式适合解决两个维度的问题,可以使问题在两个维度上无限扩张,并且可以随意组合,比如下表: 发送消息的方式 紧急 一般 邮件 紧急消息邮件发送 一般消息邮件发送 短信 紧急消息短信发送 一般消息短信发送类图: 桥接模式必须由一方使用抽象类,持有使用接口的一方,建议描述动作的一方使用接口,描述形态的一方使用抽象类...原创 2018-08-30 20:23:06 · 493 阅读 · 0 评论 -
行为模式---解释器模式
解释器模式解释器模式解决某一领域重复出现的特定问题,使用普通编程方法极度复杂,需要这一特定领域的特定语法,解释器模式就是用来解释这种语法 类图: 比如解释加法和减法问题: 解释器:public abstract class AbstractExpression {//此处也可以使用接口 public abstract Object interpreter();}p...原创 2018-09-06 22:01:22 · 112 阅读 · 0 评论