摘要: observer(观察者)——对象行为型模式1.意图定义对象见的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并且自动更新2.别名依赖dependen发布——订阅publish——subscribe3.动机将一个系统分割成一系列相互协作的类有一个常见的副作用,需要维护相关对象间的一致性。我们不希望因为需要维护一致性而使各类紧密耦合,这样会影响可重用性。观察者模式描述了如何建立这种关系。一个目标可以有任意数目的依赖他的观察者。一旦目标状态发生改变,所有观察者都同时得到通知。作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标状态同步。4.适用性1)当一个抽 阅读全文
posted @ 2012-05-21 22:24 w0w0 阅读(357) 评论(0) 推荐(0) 编辑
摘要: memento(备忘录)——对象行为型模式1.意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将该对象恢复到之前保存的状态。2.别名Token3.动机有时候有必要记录一下对象的内部状态。但是对象通常又封装了部分或者所有的状态信息,使得其状态不能被其他对象访问,也就不可能在该对象之外保存状态。而暴露其内部状态又违反了封装原则。我们可以用备忘录来解决这一问题。一个备忘录是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者被称为备忘录的原发器。原发器用描述当前状态的信息初始化备忘录,只有原发器可以向备忘录中存取信息。4.适用性必须保存一个对象在某一个时刻 阅读全文
posted @ 2012-05-21 20:45 w0w0 阅读(298) 评论(0) 推荐(0) 编辑
摘要: mediator(中介者模式)——对象行为型模式1.意图用一个中介对象来封装一系列的对象交互。中介者使不同对象不需要显式地相互引用,从而使其松散耦合,从而使得可以独立地改变他们之间的交互。2.动机面向对象设计鼓励将行为分部到各个对象中,这种分部可能会导致对象间有许多连接。在最坏的情况下,每个对象都知道其他所有的对象。虽然将一个系统分隔成很多对象通常会增加可复用性,但是对象间的相互连接的激增又会降低其可复用性。可以通过将集体行为封装在一个单独的中介者对象中以避免这个问题,中介者负责控制和协调对象间的交互。中介者充当一个中介以使组中的对象不再相互显式的引用。这些对象仅知道中介者,从而减少了相互连接 阅读全文
posted @ 2012-05-21 16:41 w0w0 阅读(264) 评论(0) 推荐(0) 编辑
摘要: iterator(迭代器)——对象行为型模式1.意图提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。2.别名游标(cursor)3.动机一个聚合对象,应该提供一种方法来让别人可以访问它的列表,而又不暴露它的内部结构。此外,针对不同需要,可能要以不同的方式遍历这个列表。但是即使可以预见到所需的那些遍历操作,你可能也不希望列表的接口中充斥着各种不同遍历的操作。有时还可能需要在同一列表上同时进行各个遍历。迭代器模式都可以解决这些问题。这一模式的关键思想是将对列表的访问和访问从列表对象中分离出来并且放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟 阅读全文
posted @ 2012-05-21 15:19 w0w0 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 卡特兰数研究问题:研究一串n个矩形加全部括号的方案数当n=1时,只有一种方式来加全部括号矩阵当n>=2时,一个加全部括号的矩阵就是两个加全部括号的矩阵子方案数的乘积,而且这两个子方案的分裂可能发生在第k个和第k+1个矩阵之间,其中k=1,2..n-1因此可得递归式:h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=2)递归式:h(n)=((4*n-2)/(n+1))*h(n-1);该递推关系的解为:h(n)=C(2n,n)/(n+1) (n=1,2,3,...)这个数就是卡特兰数。在网上找到的卡特兰的介绍: Catal 阅读全文
posted @ 2012-05-21 12:50 w0w0 阅读(281) 评论(0) 推荐(0) 编辑
摘要: Interpreter(解释器)——类行为型模式1.意图给定一个语言,定义它的一种文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2.动机如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。解释器模式描述了如何让为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这个句子。3.适用性当有一个语言需要解释执行,并且你可以将该语言中的一个句子表示为一个抽象语法树时,可使用解释器模式,而当存在以下情况时该模式的效果最好:1)该文法简单,对于复杂的文法 阅读全文
posted @ 2012-05-21 10:53 w0w0 阅读(275) 评论(0) 推荐(0) 编辑