接上上篇,来总结行为模式的剩余六个.
六,观察者模式(Observer):
1,定义:定义了一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
2,基本结构图:
3,总结:
当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少个对象有待改变时,我们就使用观察者模式。当然,当一个抽象模型有两个方面,其中一个方面依赖另一方面,这是用观察者模式可以将这两者封装在独立的对象中使它们各自独立的改变和复用。
4,引用举例:公司前台替员工看老板是否回来。
七,迭代器模式(Iterator)
1,定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
2,基本结构:
3,总结:在.NET中,IEumerator支持对非泛型集合的简单迭代接口。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样可以做到不暴露集合的内部结构,又可以让外部代码透明化地访问集合内部的数据。在访问数组,集合,列表等数据时,尤其是数据库时,是非常普遍应用的,因此各种高级语言都对它进行了封装,所以我们直接用封装即可。
4,应用举例:公交车售票员售票
八,职责链模式(Chian of Responsiblity):
1,定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
2,基本结构图:
3,总结:职责链模式可以使接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。
4,应用举例:公司申请加薪
九,中介者模式(Mediator):
1,定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2,基本结构图:
3,总结:用处,一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。中介者模式很容易理解,也容易在系统中应用,当然更容易在系统中误用。当出现多对多交互复杂的对象群时,不要急于使用中介者模式,而应该先考虑自己设计的是否合理。
4,引用举例:联合国安理会
十,解释器模式(interpreter)
1,定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
2,基本结构图:
3,总结:当一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。此模式可以很容易的改变和扩展文法,因为该模式使用类表示文法规则,你可以使用继承来改变或扩展文法。 当然它的不足:此模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维护。
4,引用举例:翻译音乐普
十一,访问者模式(Visitor):
1,定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
2,基本结构图:
3,总结:访问者模式适用于数据结构相对稳定的系统,它将数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。也就是把处理从数据结构分离出来。其优点就是增加新的操作时很容易,因为增加新的操作就意味着增加一个新的访问者。其缺点就是,增加数据结构变得困难。
4,引用举例:男人和女人成功失败。
总此为设计模式中的行为模式的总结,还是需要多实践才能见真知。