设计模式
文香P
我到底在做些什么啊
展开
-
外观模式
隐藏系统中各个子系统的细节,提供一个统一的接口;但不符合开闭原则。public class SubSystem1 { public void operation1() { System.out.println("operation1"); } public void operation2() { System.out.printl...原创 2018-10-11 15:30:24 · 99 阅读 · 0 评论 -
简单工厂模式,工厂方法模式,抽象工厂模式
不用关注创建对象的过程,就能获得实例;减少new操作。简单工厂模式public interface Shape { void draw();}public class Triangle implements Shape { @Override public void draw() { System.out.println("draw ...原创 2018-10-03 09:04:13 · 169 阅读 · 0 评论 -
观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。public interface User { void update(String message);}public class Worker implements User { @Override public void update(String m...原创 2018-10-16 20:55:44 · 2053 阅读 · 0 评论 -
桥接模式
桥接用于把抽象化与实现化解耦,使得二者可以独立变化。在一个类存在多个独立变化的维度,多个维度都需要独立进行扩展,而且多个维度可以进行组合的情况下可以使用桥接模式。其中,抽象部分为与业务密切相关的核心维度,其他部分为实现部分;抽象部分关联着实现部分。public interface Color { void paint();}public class Red implemen...原创 2018-10-10 13:54:57 · 108 阅读 · 0 评论 -
备忘录模式
就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。public class Memento { private String value; public Memento(String value) { this.value = value; } public Stri...原创 2018-10-22 16:39:10 · 106 阅读 · 0 评论 -
责任链模式
每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者。public abstract class StringHandler { private StringHandler nextHandler; public StringHandler setNextHandler(StringHandler nextHandler) ...原创 2018-10-20 10:50:51 · 123 阅读 · 0 评论 -
中介者模式
中介者模式通过提供了一个中介类,处理不同类之间复杂的引用关系;将一个网状的系统结构变成一个以中介者对象为中心的星形结构。public interface Mediator { void broadcast(ChatUser chatUser, String message);}public class ChatMediator implements Mediator {...原创 2018-10-25 14:30:14 · 116 阅读 · 0 评论 -
命令模式
用于将命令的请求者和命令的执行者解耦。public class ToyCar { public void Forward() { System.out.println("forward"); } public void Back() { System.out.println("back"); }}public int...原创 2018-10-21 17:16:53 · 144 阅读 · 0 评论 -
状态模式
对象的行为依赖于它的状态,并且可以根据它的状态改变而改变它的相关行为。Context类是一个状态管理器,控制状态转换。public interface State { void action();}public class AliveState implements State { @Override public void action() { ...原创 2018-10-24 09:48:33 · 124 阅读 · 0 评论 -
访问者模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。Element抽象元素一般是抽象类或者接口,它定义一个accept()方法,该方法通常以...原创 2018-10-24 14:21:21 · 174 阅读 · 0 评论 -
代理模式
可以隐藏委托类的实现,实现客户与委托类间的解耦,减少冗余代码。静态代理与动态代理的区别在于,代理类是否是手动编写的;动态代理有JDK动态代理和Cglib动态代理,后者针对没有接口的类。静态代理public interface House { void buy();}public class HouseImpl implements House { @Over...原创 2018-10-09 11:34:49 · 111 阅读 · 0 评论 -
模板模式
定义一个操作中的算法的步骤框架,而将一些具体实现放到子类中。模板方法使得子类可以在不改变一个算法的结构步骤的情况下就可重定义该算法的某些特定步骤的实现。public abstract class Dinner { void wash() { System.out.println("wash"); } abstract void cut(); ...原创 2018-10-15 16:02:35 · 89 阅读 · 0 评论 -
单例模式
这里直接推荐两种线程安全写法。Double-Checkpublic class DoubleCheckSingleton { private volatile static DoubleCheckSingleton doubleCheckSingleton; private DoubleCheckSingleton() { } public stati...原创 2018-10-04 08:31:01 · 170 阅读 · 0 评论 -
策略模式
可相互替换一系列的算法或行为;避免使用多重条件判断,扩展性好。public interface Calculator { void getResult();}public class AddMethod implements Calculator { @Override public void getResult() { System.out...原创 2018-10-12 09:52:21 · 120 阅读 · 0 评论 -
建造者模式
建造者模式和工厂模式有点类似,区别在于:建造者模式创建的是一个完整的对象,侧重于一步步构造;工厂模式创建的是一系列相似的对象。public class Actor { private String role; private String sex; private String figure; public String getRole() { ...原创 2018-10-05 13:22:02 · 216 阅读 · 0 评论 -
组合模式
组合多个对象形成树形结构以表示“整体-部分”的结构层次。Component :组合中的对象接口,定义共有接口;Leaf:“部分”,叶子对象;Composite:容器,“整体”对象,实现与叶子对象有关操作。public abstract class File { String name; public File(String name) { this.na...原创 2018-10-12 17:48:05 · 100 阅读 · 0 评论 -
原型模式
浅拷贝与深拷贝的区别在于,引用类型是否指向同一个内存地址。浅拷贝public class Attachment { private String name; public String getName() { return name; } public void setName(String name) { this.n...原创 2018-10-06 08:58:35 · 191 阅读 · 0 评论 -
享元模式
主要用于减少创建对象的数量,通常和工厂模式连用。public interface Shape { void draw();}public class Circle implements Shape { @Override public void draw() { System.out.println("draw circle"); }...原创 2018-10-13 08:57:51 · 82 阅读 · 0 评论 -
装饰器模式
动态地给一个对象添加一些额外的部分。防止类膨胀。public interface Car { void make();}public class Benz implements Car { @Override public void make() { System.out.println("make Benz"); }}publ...原创 2018-10-07 09:29:06 · 174 阅读 · 0 评论 -
适配器模式
将现有的不能满足需求的方法转换成功能相同的满足需求的方法,类适配器和对象适配器类似;而接口适配器还可以满足实现接口中的部分方法的要求。类适配器模式public class AC220 { public void charge() { System.out.println("AC220V"); }}public interface DC5 { ...原创 2018-10-08 10:40:26 · 155 阅读 · 0 评论 -
迭代子模式
一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。分为:宽接口聚集,又叫做白盒聚合;窄接口聚合,又叫做黑盒聚合;区别在于白盒聚合向外部提供了操作聚合元素的方法。白盒聚合/** * * 外部迭代接口 */public interface Iterator { boolean hasNext(); String next();}pub...原创 2018-10-19 16:32:51 · 106 阅读 · 0 评论 -
解释器模式
定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,“语言”是指使用规定格式和语法的代码。其中,Context类用于存储解释器之外的一些全局信息;NumberNode类称作终结符表达式;SymbolNode类称作非终结符表达式;非终结符表达式中包含其他非终结符表达式或终结符表达式,非终结符表达式中的interpret方法通常以递归方式执行。public interface N...原创 2018-10-27 19:41:16 · 334 阅读 · 0 评论