![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式随笔
文章平均质量分 50
ninichenchen
热爱编程,热爱生活,热爱这个世界的一切!
展开
-
简单工厂模式-静态工厂方法
接口的思想就是“封装隔离”。接口是系统可插拔性的保证。1.优先使用接口2.在既要定义子类的行为,又要为子类提供公共的功能时选择抽象类。 public interface Api { public void operation(String s);} public class ImplA implements Api { public void operat...2014-03-05 14:01:52 · 66 阅读 · 0 评论 -
组合模式Composite统一叶子对象和组合对象
将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。public abstract class Component { public abstract void someOperation(); public void addChild(Component child) { throw new UnsupportedO...原创 2014-03-07 18:18:28 · 108 阅读 · 0 评论 -
模板方法模式Templete Method 固定算法骨架
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。public abstract class AbstractClass { public abstract void doPrimitiveOperation1(); public abstract void doPrimitiveOperation2();...原创 2014-03-11 11:15:52 · 152 阅读 · 0 评论 -
策略模式Strategy分离算法,选择实现
迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要用另一个类的某一个方法的话,可以通过第三者转发这个调用。策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。public interface Strategy { public void alg...原创 2014-03-11 15:26:46 · 115 阅读 · 0 评论 -
状态模式State根据状态来分离和选择行为
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。状态决定行为。public interface VoteState { public void vote(String user,String voteItem,VoteManager voteManager);...原创 2014-03-11 17:20:11 · 89 阅读 · 0 评论 -
备忘录模式Memento保存和回复内部状态
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。public interface Memento { }public class Originator { private String state = ""; public Memento createMemento() { r...原创 2014-03-11 17:47:26 · 76 阅读 · 0 评论 -
享元模式Flyweight分离与共享
运用共享技术有效地支持大量细粒度的对象。安全实体:就是被系统检测的对象,比如工资数据。权限:就是需要被校验的权限对象,比如查看、修改等。授权:把对某些安全实体的某些权限分配给某些人员的过程。验证:判断某个人员对某个安全实体是否拥有某个或某些权限的过程。也就是说授权过程即是权限的分配过程,而验证过程则是权限的匹配过程。所谓实例池,指的是缓存和管理对象实例的程序,通...原创 2014-03-12 13:20:19 · 60 阅读 · 0 评论 -
解释器模式Interpreters分离实现,解释执行
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。public class Context {}public abstract class AbstractExpression { public abstract void interpret(Context ctx);}public class TerminalE...原创 2014-03-12 16:27:25 · 68 阅读 · 0 评论 -
装饰模式Decorator动态组合
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。所谓透明地给一个对象增加功能,就是要给一个对象增加功能,但是不能让这个对象知道,也就是不能去改动这个对象。public abstract class Component { public abstract void operation();}public class ConcreteC...原创 2014-03-12 17:00:18 · 84 阅读 · 0 评论 -
职责链模式Chain of Responsibility分离职责,动态组合
使多个对象都有机会处理请求,从而避免请求的发送者和接收者直接的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。public abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.s...原创 2014-03-12 17:25:34 · 74 阅读 · 0 评论 -
访问者模式Visitor预留通路,回调实现
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。原创 2014-03-13 16:55:10 · 75 阅读 · 0 评论 -
迭代器模式Iterator 控制访问聚合对象中的元素
提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。public interface Iterator { public void first(); public void next(); public boolean isDone(); public Object currentItem();}public abstract cl...原创 2014-03-07 17:57:57 · 183 阅读 · 0 评论 -
命令模式Command 封装请求
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。机箱上的按钮就相当于命令对象。机箱相当于Invoker主板相当于接收者对象,真正实现功能。命令对象持有一个接收者对象,就相当于给机箱的按钮连上了一个连接线。当机箱上的按钮被按下时,机箱就把这个命令通过连接线发送出去。public interface Main...原创 2014-03-07 16:26:53 · 109 阅读 · 0 评论 -
外观模式/门面模式Facade 为了更好地划分访问的层次
public interface AModuleApi { public void testA();}public class AModuleImpl implements AModuleApi { public void testA() { System.out.println("testA"); }}public interface BMod...原创 2014-03-05 14:30:51 · 93 阅读 · 0 评论 -
适配器模式Adapter - 主要用来实现版本兼容
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。public interface Target { public void request();}public class Adaptee { public void existRequest() { // }}public c...原创 2014-03-05 14:48:59 · 88 阅读 · 0 评论 -
单例模式Singleton某个类只需要一个类实例
保证一个类只有一个实例,并提供一个访问它的全局访问点。懒汉式和饿汉式懒汉式public class Singleton { private static Singleton instance = null; private Singleton() { } public static synchronized Singleton getInstan...原创 2014-03-05 16:46:36 · 131 阅读 · 0 评论 -
工厂方法模式Factory Method延迟到子类来选择实现
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。工厂方法模式的解决思路就是不解决,采用无为而治的方式。public class ExportA implements ExportApi { public boolean export(String data) { System.out.println(...原创 2014-03-05 18:12:55 · 318 阅读 · 0 评论 -
中介者模式Mediator 封装交互
用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。public interface Mediator { public void changed(Colleague colleague);}public abstract class Colleague { private Mediator m...原创 2014-03-06 00:19:29 · 98 阅读 · 0 评论 -
原型模式Prototype 克隆生成对象
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。public interface Prototype { public Prototype clone();}public class ConcretePrototype1 implements Prototype { public Prototype clone() { Prototype ...原创 2014-03-06 00:19:39 · 145 阅读 · 0 评论 -
生成器模式Builder 分离整体构建算法和部件构造
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。例如导出数据到文本文件和XML文件的步骤都是一样的:文件头,内容,文件尾public interface Builder { public void buildPart();}public interface Product { }public class Concrete...原创 2014-03-06 00:19:49 · 84 阅读 · 0 评论 -
抽象工厂模式 Abstract Factory 选择产品簇的实现
工厂方法模式或简单工厂关注的是单个产品对象的创建,比如创建CPU的工厂方法,它就只关心如何创建CPU对象,而创建主板的工厂方法,就只关心如何创建主板对象。public interface AbstractFactory{ public AbstractProductA createProductA(); public AbstractProductB createProductB(...原创 2014-03-06 00:20:34 · 172 阅读 · 0 评论 -
代理模式Proxy 为别人做嫁衣(控制对象访问)
为其他对象提供一种代理以控罪对这个对象的访问。代理大致被分为以下几种:虚代理:根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正创建。远程代理:用来在不同的地址空间上代表同一对象,这个不同的地址空间可以是在本机,也可以在其他机器上。java里最典型的就是RMI技术。copy-on-write代理:在客户端操作的时候,只有对象确实改变了,才会真的拷贝(克隆)一...原创 2014-03-06 00:39:35 · 121 阅读 · 0 评论 -
观察者模式Observer订阅模式-触发联动
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。public class Subject {// 被观察者 private List readers = new ArrayList(); public void attach(Observer observer) { readers.add(observer); ...原创 2014-03-07 11:19:02 · 146 阅读 · 0 评论 -
桥接模式Bridge分离抽象和实现
将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接在程序上体现了在抽象部分拥有实现部分的接口对象,维护桥接就是维护这个关系。在Java应用中,对于桥接模式有一个非常典型的例子,即使应用程序使用JDBC驱动程序进行开发的方式。所谓驱动程序,指的是按照预先约定好的接口来操作计算机系统或者是外围设备的程序。...原创 2014-03-13 16:55:18 · 144 阅读 · 0 评论