
设计模式
Paul_Huang_2011
这个作者很懒,什么都没留下…
展开
-
设计模式(1)——抽象工厂模式
抽象工厂模式是指创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式用于:1. 系统需要独立于产品创建、组合和表示时。2. 系统需要多个产品系列中的一个来配置时。3. 当要强调一系列相关的产品对象的设计以便进行联合使用时。3. 当提供一个产品类库,只想显示它们的接口而不是实现时。举例来说:1. 中国和美国的电话号码和地址规则不一样,AbstractFactory 可以创建一个电原创 2015-05-09 23:17:40 · 599 阅读 · 0 评论 -
设计模式(14)——Command(命令)
Command模式是什么?Command将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。Command模式中,有几个关键角色:1. Command,声明执行操作的接口2. ConcreteCommand把一个接受者对象绑定于一个动作,调用接收者相应的操作,实现Execute3. Invoker翻译 2015-05-11 22:15:05 · 725 阅读 · 0 评论 -
设计模式(15)——解释器(Interpreter)
解释器模式是什么?解释器模式简单来说就是用语法规则来解释一种语言。需要定义语法,以及一个解释器。解释器的适用范围解释器模式适用于有一个语言需要解释执行,而且可以将该语言中的句子表示为一个抽象语法树。在下列情况下,效果最好:1. 文法简单。2. 效率不是一个关键问题。示例加,减的文法解释示例:import java.util.Map; in翻译 2015-05-11 22:28:13 · 639 阅读 · 0 评论 -
设计模式(16)——Iterator(迭代器)
迭代器是什么?迭代器提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。迭代器的使用范围1、 访问一个聚合(collections)对象的内容二无需暴露它的内部表示2. 支持对聚合对象的多种遍历。3. 为遍历不同的聚合结构提供一个统一的接口。迭代器的示例interface IIterator{ public boolean h翻译 2015-05-11 22:33:32 · 765 阅读 · 0 评论 -
设计模式(17)——Mediator(中介者)
中介者模式是什么?中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式封装了对象之间的通信。对象不再直接通信,而是通过中介者通信。中介者模式的示例下面以飞机着陆为例说明Mediator的应用,在例子中,飞机和跑道不直接通信,而是通过mediator处理。public inter翻译 2015-05-12 22:59:45 · 534 阅读 · 0 评论 -
设计模式(18)——Memento(备忘录)
备忘录是什么?备忘录模式是在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象回复到原先保存的状态。备忘录模式示例下面的示例中,实现了undo功能,把状态暂时保存到Memento,然后再取回来。import java.util.List;import java.util.ArrayList;class Origin翻译 2015-05-12 23:06:57 · 781 阅读 · 0 评论 -
设计模式(19)—— Observer (观察者)
观察者模式是什么?观察者模式定义了对象间一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的适用范围1. 一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者方庄在独立的对象中以使它们可以各自独立地改变和复用。2. 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。3.翻译 2015-05-13 23:34:18 · 527 阅读 · 0 评论 -
设计模式(20)—— State (状态)
状态模式是什么?状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式的适用范围状态模式的典型例子就是状态机,随着状态不同,选择的行为也不一样,具体的行为根据运行时的状态决定。采用状态模式后,可以省去一大堆条件判断语句。在状态模式中,把每种条件分支放入一个类中,处理更为灵活。状态模式的示例下面翻译 2015-05-13 23:48:07 · 676 阅读 · 0 评论 -
设计模式(21)——Strategy (策略)
什么是Strategy策略?Strategy策略是定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。策略模式的主要目的是隔离算法。Strategy策略的适用范围许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法需要使用一个算法的不同变体。算法使用了客户不应该知道的数据翻译 2015-05-17 00:13:54 · 611 阅读 · 0 评论 -
设计模式(22)——Template Method(模板方法)
模板方法是什么?模板方法定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样的话,子类可以修改算法的某些步骤,而不会改变算法的结构。模板方法的适用范围1. 一次性实现算法的不变部分,将可变的行为留给子类实现2. 提出子类中的公共部分到公共父类中,以避免代码重复3. 控制子类扩展。模板方式的示例下面以商店的订单处理为例说明模板方式的使用:翻译 2015-05-17 00:23:29 · 685 阅读 · 0 评论 -
设计模式(13)——责任链(Chain of Responsibility)
责任链是什么?责任链条模式使多个对象都有机会处理请求。打个比方说,责任就是得分,多个对象就是篮球队员,在三分线的远投的时候,球由投手投篮。带球突破则由后卫负责。。。责任链模式的适用范围1. 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。2. 在不明确指定接收者的情况下向多个对象中的一个提交一个请求。3. 可处理的一个请求对象集合应被动态指定。翻译 2015-05-11 21:59:09 · 647 阅读 · 0 评论 -
设计模式(12)——代理(Proxy)模式
什么是代理模式?代理模式为其他对象提供一个代理来控制对这个对象的访问。代理模式的适用范围代理模式的主要有几种用途:1. 远程代理2. 虚代理(根据需要创建开销很大的对象),比如某个对象的初始化开销很大,则使用虚代理暴露该对象的某些方法,不到万不得已不对开销大的对象进行初始化。3. 保护代理。控制对原始对象的访问。(比如在DoAction()之前和之后进行某些翻译 2015-05-11 00:14:32 · 592 阅读 · 0 评论 -
设计模式(11)——享元(Flyweight)模式
什么是享元模式?享元模式跟CACHE机制类似,它运用共享技术有效地支持大量细粒度的对象。Flyweight通过尽可能地与其他对象共享数据来减少对内存的使用。Flyweight的经典例子就是字符处理器中的字符图形。如果每个字符都用一个单独的图形表示,则会占用大量的空间。而采用字符表的形式,只保持对字符图形的引用关系,则能节省大量空间。另一个例子是字符串的驻留(String Interni翻译 2015-05-10 23:56:55 · 728 阅读 · 0 评论 -
设计模式(2)—— 生成器 (Builder)
Builder解决的问题Builder(生成器)的模式用于用多个部件生成不同产品的问题:Builder模式适用于:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时当构造过程必须允许被构造的对象有不同的表示时。Builder模式详解在该模式中,Builder定义了一个抽象接口,用于创建Product对象的各部分Concretebu翻译 2015-05-09 23:56:38 · 773 阅读 · 0 评论 -
设计模式(7)——Bridge模式(桥接)
Bridge模式的作用Bridge模式就是把抽象部分与其实现部分分离,使它们都可以独立地变化。Bridge模式的适用性1. 不希望在抽象和它的实现部分之间有一个固定的绑定关系。2. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。3. 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译4. 想在多个对象间共享实现,但同时翻译 2015-05-10 01:35:24 · 611 阅读 · 0 评论 -
设计模式(6)——适配器模式(Adapter)
Adapter是什么?出过国的朋友都知道,中国和外国的电源插头不同,出国前要买个适配器,用于适配插座。适配器的作用就是把一个类的接口转换成客户希望的另一个接口。Adapter的图如下,可以明显看出,对client的call进行了转换。Adaptee指已经存在,需要进行适配的接口。Adapter可以使用继承和组合两种方式实现。Adatper的应用举例翻译 2015-05-10 01:14:36 · 847 阅读 · 0 评论 -
设计模式(3)—— Prototype(原型)
Prototype模式能干什么?原型(prototype)用于指定创建对象的种类,并且通过复制这些原型创建新的对象,典型的例子就是细胞分裂,一个细胞分裂成两个一模一样的细胞。Prototype模式的使用Implement了Cloneable接口类,实现Clone()。您可以根据业务需要进行Deep克隆或者shallow克隆颜色:public abst翻译 2015-05-10 00:30:29 · 686 阅读 · 0 评论 -
设计模式(4)——Factory method(工厂方法)
工厂方法的作用?工厂方法又称为虚拟构造器,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。它的UML图如下: 上图中,Product定义了一个接口用于Factory创建的各种对象,Factory声明了一个方法用于创建Product.ConcreteProduct和ConcreteFactory则是具体的实现工厂方法的示例动物的叫声,不同动物翻译 2015-05-10 00:50:27 · 712 阅读 · 0 评论 -
设计模式(5)——单例模式
单例模式是什么?单例模式保证一个类只有一个示例,并提供一个访问它的全局访问点。单例模式的应用1. 日志类在日志类的设计中,使用了单例模式,保证全局只有一个日志类。2. 配置类配置类也需要保证全局只有一个配置类,并可以把它放到缓存中。3. 共享资源的访问比如打印机串口,用单例和Synchronize操作可以保证对打印机的操作不冲突。翻译 2015-05-10 00:59:59 · 477 阅读 · 0 评论 -
设计模式(8)——Composite(组合)模式
public class Circle implements Shape { @Override public void draw(String fillColor) { System.out.println("Drawing Circle with color "+fillColor); }}什么是组合模式?组合模式把对象组合成树形结构以表示“部分-整体”的层次结构。它就翻译 2015-05-10 22:44:43 · 680 阅读 · 0 评论 -
设计模式(9)——Decorator(装饰)模式
什么是装饰模式?装饰模式是动态地(在运行时)给一个对象添加一些额外的职责。装饰模式的适用范围1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;2. 处理那些可以撤销的职责3. 当不能采用生成子类的方式进行扩充时。装饰模式的示例/** * Window Interface * * Component window翻译 2015-05-10 22:58:03 · 540 阅读 · 0 评论 -
设计模式(10)——Facade(外观)模式
什么是外观模式?外观模式是为子系统的一组接口提供一个一致的界面。让外界对子系统的操作更为简单。外观模式的适用范围外观模式适用于:1. 要为一个复杂的子系统提供一个简单的接口2. 子系统的抽象和实现部分紧耦合3. 为层次结构的子系统定义每层的入口点。外观模式的示例/* Complex parts */ class CPU {翻译 2015-05-10 23:07:16 · 618 阅读 · 0 评论 -
设计模式(23)——Visitor(访问者)
访问者模式是什么?访问者模式表示一个作用于某对象结构中的每个元素的操作,而不需要关注每个元素的类型。访问者模式的适用范围:想定义一个新的操作,而不想改变被操作对象的类型。访问者模式的示例:下面用在汽车的部件上添加打印操作的示例来说明访问者模式:interface ICarElementVisitor { voi翻译 2015-05-17 00:58:46 · 508 阅读 · 0 评论