技术开发 频道

.NET行为型模式概述

【IT168 技术文档】

    构建型模式和结构型模式强调的都是静态的类实体之间的关系,行为型模式着力解决的是类实体之间的通讯关系。希望以面向对象的方式描述一个控制流程。

    以往的经历中大多是解决类实体的封装问题,对于类之间的通讯方式上,并没有刻意的去理解,所以有些行为型模式相对陌生。

    还有一个原因就是行为型模式和面向过程的东西有很多近似之处,导致一定的理解的混淆。从笔记就可以看出理解的不够,可以再专门针对行为型模式做些细节的学习。

    1 chain of responsibility(职责链)-行为型对象模式

    这是个“请求”处理的模式。他提供一个思路,来解决“请求”在一组具有一定结构的类之间传递时的问题,所以,我认为这只是一种思路,一种将“请求”象链条一样传导出去的方式。他的具体传递方式,除了和链的设计有关之外,最重要的是和对象组的结构有关。

    当然,如果没有结构的对象组,我们也可以强行的动态构建一个链,这种方式虽然复杂和略土,但肯定更加的灵活,不仅能控制处理,还能控制链的走向。

    一般来看,composite模式和这种模式经常在一起,Microsoft IE中的文档事件模型应该采用的就是这样的模式。

    2 command(命令)-行为型对象模式

    将请求封装为一个对象,从而可以对请求做一些统一性处理,如:排队、日志、撤销等。

    适用性:
    1、是回调机制的一个面向对象的替代品
    2、在不同时期指定、排列、和执行请求
    3、支持取消操作,但是,此处对象的状态存储是个麻烦的东西。
    4、支持原语操作上构建高层操作的系统。这种在支持“事务”的系统中很常见。

    3、Iterator(迭代器)-行为型对象模式

    将聚合类的遍历算法封装为Iterator,从而封装对象的内部表示。Iterator分为外部和内部,外部更加灵活,内部传入参数简单(只需要操作),内部Iterator自动遍历所有元素。Iterator可以封装算法,也可以只记录状态,由聚合类封装算法,封装算法的iterator可能会破坏聚合类的封装性。

    4、mediator(中介者)

    mediator希望通过一个中控对象来完成对多个对象的关系的管理。将多数可以可以重用的组件无关联的构建起来,而他们之间的关系由额外的对象来完成。在图形化编程里,可以用此模式和listener机制(observer模式)结合使用,更加方便,进一步解除了中控对象与其他对象的耦合。

    5、memento(备忘录)/token

    原发器(originator)(需要保存状态的)申请一个备忘录(memento),并自己将状态保存进去,然后,将备忘录交给管理者(caretaker),当出现需要的时候,管理者将合适的备忘录交给原发器,原发器自己恢复自己的状态。memento模式,从originator中分离了保存客户请求状态的过程。并且memento的存储和解释都是由originator完成,保证了封装的边界。如果备忘录的创建及其返回(给原发器)的顺序是可预测的,备忘录可以存储增量改变。

    6、observer(观察者)/依赖(dependents)/发布-订阅(Publish-Subject)

    suject(目标)和observer(观察者)是关键对象,suject和不固定的observer发生关系,将这种关系解耦是这个模式的主要功能,listener机制可以看作这种模式的一个实现,当然mvc也是这种模式的一个好的应用场景。与mediator的区别主要体现在,observer是一个对关联关系的解耦过程,而mediator更加注重各个对象执行的功能。

    7、state(状态)/状态对象(Objects for Status)

    允许一个对象在改变其状态的时候改变它的行为,使得对象似乎修改了自己的类。
    1、将状态相关的行为局部化。
    2、状态转换显式化
    我们可以根据当前窗口的状态来转变窗口的菜单和操作,这种方式可以用state模式来实现。

    8、strategy(策略)

    将算法单独的封装起来,使得它独立于其他对象的变化。其实这种方式和面向过程里的一个算法函数封装基本是一样的,只是由于封装成为了类,会有一些接口统一的便于替换的特性。

     9、visitor(访问者)

     这种模式的主要目的是分离操作和对象,追求的是对象的重用和简单,以及操作的可替代性。相对来说,strategy模式更加追求的是封装操作,追求操作的重用性。observer、mediator追求分离对象之间的关系与对象本身。

     以上都是对象级别的行为模式,以下是类级别的行为模式
     1、template(模板) 定义一个算法的骨架,并将其中一些步骤延迟到子类中。
     2、interpreter(解释器) 本模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。这种方式在正则表达式中比较明显,在以往的程序应用中,特别是上层应用中很少用到。

0
相关文章