Interpreter解释器(行为型模式)
摘要:动机: 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。 在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图: 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 出自:《设计模式》GoFInter...
阅读全文
Command命令(行为型模式)
摘要:动机: 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合--比如需要对行为进行“记录、撤销/重做(Undo/Redo)、事务”等处理,这种无法抵御变化的紧耦合是不合适的。 在这种情况下,如何将“行为请求者”与“行为实现解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。 意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排...
阅读全文
TemplateMethod模板方法(行为型模式)
摘要:动机: 在软件构建的过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义...
阅读全文
Proxy代理(结构型模式)
摘要:动机: 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。意图: 为其他对象提供一种代理以控制对这个对象的访问。 出自:《设计模式》GoFProxy模式的几个要点: 1、...
阅读全文
Flyweight享元(结构型模式)
摘要:动机: 采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价--主要指内存需求方面的代价。 如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作? 意图: 运用共享技术有效地支持大量细粒度的对象。 出自:《设计模式》GoFFlyweight模式的几个要点: 1、面向对象很好地解决了抽象性的问题,但是作为一个运行在...
阅读全文
Facade外观(结构型模式)
摘要:动机: 如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化的内部子系统的变化之间的依赖相互解耦?意图: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 出自:《设计模式》GoFFacade模式的几个要点: 1、从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说...
阅读全文
Decorator装饰(结构型模式)
摘要:动机: 如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀的问题?从而使得任何“功能扩展变化”所导致的影响降为最低?意图: 动态地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。 出自:《设计模式》GoFDecorator模式的几个要点: 1、通过采用组合、而继承的手法,Decorator模式实现了在运行时动态...
阅读全文
Composite组合(结构型模式)
摘要:动机: 客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将客户代码的频繁变化,带来了代码的维护性差、扩展性差等弊端。 如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?意图: 将对象组合成结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组...
阅读全文
Bridge桥接(结构型模式)
摘要:动机: 当一个对象有了两个变化的维度,如何应对这种“多维度的变化”?如何利用面向对象技术来使得这个对象类型可以轻松沿着多个方向变化,而不引入额外的复杂度?意图: 将抽象部分与实现部分分离,使它们都可以独立地变化。 出自:《设计模式》GoF Bridge模式的几个要点: 1、Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象(Tank的型号)和实现(不现的平...
阅读全文
Adapter适配器(结构型模式)
摘要:动机: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?意图: 将一个类的接口转换成客房希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 出自:《设计模式》GoFAd...
阅读全文
Prototype 原型模式(创建型模式)
摘要:动机: 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客房程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客房程序”不随着需求改变而改变?意图: 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 出自:《设计模式》GoF...
阅读全文
FactoryMethod工厂方法(创建型模式)
摘要:在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。 如何应对这种变化?如何提供一种“封闭机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖该对象”不随着需求改变而改变?意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 出自:《设计模式》G...
阅读全文
Builder 生成器模式(创建型模式)
摘要:模式结构图代码试例: abstract class House{}abstract class Door{}abstract class Wall{}abstract class Windows{}abstract class Floor{}abstract class HouseCeiling{}public abstract class Builder{ public abstract v...
阅读全文
Abstract Factory 抽象工厂模式(创建型)
摘要:抽象工厂结构图 试例代码 //道路public abstract class Road{}//建筑public abstract class Building{}//地道public abstract class Tunnel{}//丛林public abstract class Jungle{}//工厂类abstract class FacilitiesFactory{ public abstr...
阅读全文
Singleton单件模式(创建型)
摘要:Singleton实现单一实例化 public class Singleton { private static Singleton instance; private Singleton (){}//私有构造器 public static Singleton instance { get { if(instance==null) ...
阅读全文