摘要:
解释器模式(Interpreter)定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。 解释器模式的优点有: 1、扩展性好。由于在解释器模式中使用类来 阅读全文
摘要:
备忘录模式(Memento)定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。 备忘录模式的优点有: 1、提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 2、实现 阅读全文
摘要:
直观对比一下两种设计模式,左图:访问者模式;右图:策略模式。可发现,访问者模式相当于两个策略模式的“并联”。 访问者模式(Visitor)定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问 阅读全文
摘要:
迭代器模式(Iterator)定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 迭代器模式的优点有: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、遍历任务交由迭代器完成,这简化了聚合类。 3、它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新 阅读全文
摘要:
中介者模式(Mediator)定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 中介者模式的优点有: 1、降低了对象之间的耦合性,使得对象易于独立地被复用。 2、将对象间的一对多关联转变为一 阅读全文
摘要:
直观对比一下两种设计模式,左图:观察者模式;右图:策略模式。可以看到观察者模式的“下部分”就是策略模式。 观察者模式(Observer)定义:指多个对象间存在一对多的依赖关系(主题是“一”,观察者是“多”),当一个(主题)对象的状态发生改变时,所有依赖于它的(观察者)对象都得到通知并被自动更新。这种 阅读全文
摘要:
首先直观对比一下两种模式,左图:状态模式;右图:策略模式。可以看出,状态模式是在策略模式的基础上,增加了状态类对环境类的“反向调用”。 状态模式(State)定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式的优点有: 1、状态 阅读全文
摘要:
责任链模式(ChainOfResponsibility)定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 责任链模式的优点有: 1、降低了对象之间的耦合度。该模式使得一 阅读全文
摘要:
命令模式与策略模式的UML类图比较接近,先直观的对比一下。左图:命令模式,右图:策略模式。 可以看出,命令模式的“上部分”就是策略模式,是在策略模式的基础上,增加了receiver类型。 命令模式(Command)定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通 阅读全文
摘要:
模板方法模式(TemplateMethod)定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 模板方法模式的优点有: 1、它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而 阅读全文
摘要:
策略模式(Strategy)定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 策略模式的优点: 1、多重条件语句不易 阅读全文
摘要:
组合模式定义:组合模式又叫作“部分-整体”模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系。使用户对单个对象和组合对象具有一致的访问性。 如图左边是:组合模式;右边是:装饰者模式。 可见组合模式就是装饰者模式的上半部分。 组合模式的优点有: 1、组合模式使得客户端代码可以 阅读全文
摘要:
享元模式定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元可以理解为“共享元件”。 享元模式的主要优点是: 相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带 阅读全文
摘要:
外观模式(Facade)定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 外观模式的优点有: 1、降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。 2、对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。 阅读全文
摘要:
装饰模式(Decorator)定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。 这里的“不改变现有对象结构”主要是指“使用的是同一个对象”。 装饰模式的优点有: 1、采用装饰模式扩展对象的功能比采用继承方式更加灵活。 2、可以设计出多个不同的具体装饰类,创 阅读全文
摘要:
桥接模式(Bridge)定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 如上图所示,平直的那条"聚合关系"就像一座桥一样。 实现部分: 抽象部分: 调用方式: 执行结果: 阅读全文
摘要:
代理模式(Proxy)定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的优点有: 1、代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 2、代理对象可以扩展目标对象的 阅读全文
摘要:
左图是:对象结构型适配器模式;右图是:类结构型适配器模式。常用的是第一种方式。 对象结构型适配器模式与代理模式的UML类图比较接近,对比的看一下: 左图是:对象结构型适配器模式;右图是:代理模式。适配器模式,可以看作是简化的代理模式,Adaptee无需实现Target接口。 适配器模式的本质就是:A 阅读全文
摘要:
建造者模式(Builder)定义:将一个复杂对象的构造与其表示分离,使同样的构造过程可以创建不同的表示。它将一个复杂的对象分解为多个简单对象,然后一步一步构建这个对象。所构造的对象的组成部分(数量、顺序)不变,而每一个组成部分的具体内容是可变的。 建造者模式的优点: 1、各个具体的建造者相互独立。 阅读全文
摘要:
工厂方法模式(FactoryMethod)定义:定义一个用于创建对象(产品对象)的接口,称之为工厂,由实现了这个工厂接口的具体类来创建对象(产品对象)。 工厂方法模式的优点是:可以方便的添加新的产品对象,而不用修改原来的代码,满足开闭原则。 如UML类图所示,目前有ProductA和ProductB 阅读全文