2015年1月1日
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2015-01-01 18:45 糊涂先生 阅读(8) 评论(0) 推荐(0) 编辑
  2013年8月5日
摘要: 访问者模式(Visitor),其含义是表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。系统面对新增的需求不能为一个需求的调整而把整个类层次结构全部修改一遍,在原有类层次结构修改也是不错的主意。访问者模式将类结构和对类增加的功能解耦,其目的是要把处理从数据结构中分离出来,从而对客户端的使用代吗进行极大的简化,使得客户使用和编程更加方便。 其适用性: 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作, 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作”污染“这些对象的类。. 阅读全文
posted @ 2013-08-05 22:52 糊涂先生 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 模板方法模式(Template Method),其含义是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是由抽象父类控制顶级逻辑,并把基本操作的实现推迟,这样通过继承的手段来达到对对象的复用。 其适用性: 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现, 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是”重分解以一般化“的一个很好的例子。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同. 阅读全文
posted @ 2013-08-05 21:53 糊涂先生 阅读(234) 评论(0) 推荐(0) 编辑
  2013年8月4日
摘要: 策略模式(Strategy),其含义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。通过类来封装不同的算法,每个算法称之为策略,就像我们可以根据排序的不同算法来使用一样,当然在使用算法必须对每一个strategy了解才行。其和状态模式很像,也较难区分关键还是要看行为是由状态驱动还是由一组算法驱动。 其适用性: 许多相关的类仅仅是行为有异。“策略”提供了一种用于多个行为中的一个行为来配置一个类的方法, 需要使用一个算法的不同变体。例如,你可能会定义一些反应不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式,. 阅读全文
posted @ 2013-08-04 23:24 糊涂先生 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 状态模式(State),其含义是允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。书中的例子是Tcp连接的状态,处于Established,Listening,Closed等,当一个连接对象收到其他对象的请求时,根据自身的当前状态做出不用的反应。又或者一个人在心情不同的时候对待同一件事会有不同的做法。 其适用性: 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为, 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。State模式将每一个条件放入一个独立的类. 阅读全文
posted @ 2013-08-04 22:16 糊涂先生 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 观察者模式(Observer),其含义是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式也称为发布-订阅模式。将一个系统分割一系列相互作用的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了它们的可重用性。 观察者模式的关键对象是目标和观察者,一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知。作为对这个通知的响应,灭个观察者都将查询目标以使其状态与目标的状态同步。目标是通知的发布者,它发出通知时并不需知道谁是它的观察者,可以有任意数目的. 阅读全文
posted @ 2013-08-04 21:06 糊涂先生 阅读(286) 评论(0) 推荐(0) 编辑
  2013年8月3日
摘要: 备忘录模式(Memento),其含义是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 有时候我们有必要记录一个对象的内部状态,可以让用户取消不确定的操作或从错误中恢复过来,但是又不能破坏封装性。我们可用备忘录模式,一个备忘录是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录,只有原发器可以向备忘录存取信息,备忘录对其他对象不可见。 其适用性: 必须保存一个对象在某一个时刻的(部分)状态,这样. 阅读全文
posted @ 2013-08-03 23:59 糊涂先生 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 中介者模式(Mediator),其含义是用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。面向对象的设计原则鼓励将行为分布到各个对象中去,这种分布可能会导致对象间有许多的连接,在最坏的情况下,每一个对象都其他对象,都和其他对象有联系。但这样降低了复用性。 可以通过一个将集体行为封装在一个单独的中介者对象中以避免这个问题。中介者负责控制和协调一组对象间的交互。使得对象间的不在相互显示引用,减少了很多的连接数目。它们之间不需要知道相互的信息,仅仅需要知道这个中间人就可以了。如大家在聊天室里聊天,不用管对方是谁,直接登入聊. 阅读全文
posted @ 2013-08-03 17:53 糊涂先生 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 迭代器模式(Iterator),其含义是提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。可以理解为我们常见的java集合中的Iterator接口,非常类似。 其适用性: 访问一个聚合对象的内容而无需暴露它的内部表示, 支持对聚合对象的多种遍历, 为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。 其结构图: 迭代器和列表式耦合在一起的,而且客户对象必须知道遍历的是一个列表而不是其他聚合结构,我们在使用时其... 阅读全文
posted @ 2013-08-03 16:27 糊涂先生 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 解释器模式(Interpreter),其含义是给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一个特定类型的问题发生的频率足够高,那么可能就值得将该问题各个实例表述为一个简单语言中的句子。这样构造一个解释器,通过解释这些句子来解决该问题了。解释器模式使用类来表示每一条文法规则。 其适用性: 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式,一下情况时效果更好: 该文法简单,对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达. 阅读全文
posted @ 2013-08-03 15:07 糊涂先生 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 命令模式(Command),其含义是将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求,这个对象可被存储并像其他的对象一样被传递。 其适用性: 如果想抽象出待执行的动作以参数化某对象,可用回调函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。Command模式是回调机制的一个面向对象的替代品, 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接受者可用一种与. 阅读全文
posted @ 2013-08-03 14:22 糊涂先生 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 职责链模式(Chain Of Responsibility),其含义是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止,我们可以考虑现实中的军情传递情况,以及java语言中的异常处理机制。 这个想法是给多个对象处理一个请求的机会,从而解耦发送者而后接受者。该请求沿对象链传递直至其中一个对象处理它,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它——我们说该请求有一个隐式的接收者。要沿链发转请求,并保证接收者为隐式的,每. 阅读全文
posted @ 2013-08-03 11:41 糊涂先生 阅读(282) 评论(0) 推荐(0) 编辑
  2013年7月29日
摘要: 代理模式(Proxy),其含义是为其他对象提供一种代理以控制对这个对象的访问。对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。当客户向Proxy对象第一次提出请求时,proxy实例化真实的对象,并且将请求传给它,以后所有的客户请求都经由proxy传给封装了的真实对象。 其适用性: 远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表, 虚代理(Virtual Proxy)根据需要创建开销很大的对象, 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候, 智能代理(Smar. 阅读全文
posted @ 2013-07-29 21:17 糊涂先生 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 享元模式(FlyWeight),其含义是运用共享技术有效地支持大量细粒度的对象,即系统只使用少量的对象,而这些对象都相近,状态变化很小,对象使用次数却很多。 享元模式能做到共享的关键是区分内蕴状态和外蕴状态,一个内蕴状态是存储在享元对象内部的,并且是不会随环境改变而有所不同的。因此一个享元可以具有内蕴状态并可以共享。一个外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态不可以影响享元对象的内蕴对象。换句话说,它们是互相独立的。 其适用性: 一个应用程序使用了大量的对象, 完全由于使用大量的. 阅读全文
posted @ 2013-07-29 20:34 糊涂先生 阅读(340) 评论(0) 推荐(0) 编辑
  2013年7月28日
摘要: 外观模式(Facade),其含义是为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式通过引入一个Facade对象,提供了一个统一的接口去访问多个子系统的多个不同的接口。遮蔽了子系统的复杂性,避免了客户与子系统直接连接,减少了子系统间的连接。 其适用性: 当你要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但却给不需要定制子系统的用户带来使用困难,Facade可以提供一个简单的缺省视图,这一视图对大多数用. 阅读全文
posted @ 2013-07-28 17:36 糊涂先生 阅读(263) 评论(0) 推荐(0) 编辑