单身交友
1.3 一个例子 下面我们将试验一个简单的设计模式:命令(Command)模式,看如何将其用UML表示出来。并如何应用到一个具体的模型中去。这儿不再详述命令模式的具体的语义,如果有不太熟悉的地方可以参考GoF的《设计模式》一书。 命令模式有如下的结构: 图1:命令模式的结构类图 我们将其每一个部分都看作是一个协作的参数,得到如下的一个参数化协作: 图2:命令模式对应的参数化协作 或者,我们还可以用一个额外的顺序图来表示这个模式的动态行为: 图3:命令模式的动态行为顺序图 我们再来看一看模式的的应用,在一个具体的模型中,比如说EJB的模型,假如设计需要使用命令模式来完成一个Command的EJB调用层(关于EJB中的命令模式,具体可以参见《EJB模式语言》一书,这而为了简便起见,作了一些的简化。)根据命令模式的语义,可以对模板参数作如下的绑定:
1.4 关于协作的一些后续话题 协作说明了众多参与者之间的交互方式,而这些参与者,并不仅仅局限于类或者接口。它可以是一个类元或者链。实际上,在协作中的参与者,并非是类或者,接口,是一种新的建模元素,称之为协作角色。协作角色代表了一个对象结构中的命名槽(slot),表示出在特定语境中的元素的行为。它并不表示实际存在的对象或者链,而是当协作实例化时,对象或者链被替代的位置。从这种意义上讲,协作角色相当于一个函数中的参数。 一个类元也拥有具体的类型,比如说类,接口,或者子系统等等。就像函数调用时提供给其的参数值要满足参数的类型一样,在应用模式时,类元的类型也需要得到满足。比如,你不能够把一个接口类型的类元角色绑定到一个类上去。从传统意义上的类或者接口,到协作中的协作角色,可以说是一种建模思想上的变化。角色这个词,也很好的体现了这个概念。可以用它同电影中的角色进行类比,只要任何人,瞒住了角色所提出的要求(比如性别,年龄,演技,等等),都可以充当这个角色的扮演者。而角色并不是一个具体的对象,而是由一个对象来承担。在这一点上,同Java中的接口的概念比较类似,但更为抽象。 协作角色包括类元角色和关联角色。对这一点,后面还会提到,在XDE中,角色的概念已经被扩充,而不仅仅只是能标是类元或者关联,而能够表示任何合法的UML模型元素。比如属性,方法,甚至视图。这样,模式的表达能力被大大地增强了,模式也能够拥有更为丰富的语义。 在后续的系列中,我们会使用Rational公司最新的XDE工具来实现对模式的建模与使用。XDE是最新的集建模与编码于一体的IDE,在很大程度上代表了今后IDE的发展方向,它所提供的强大的模式机制,能够将UML中对模式的建模能力,现实的转化为提高软件生产率的有效工具。让我们在下一期的系列文章中再见吧。