WEB开发网
开发学院软件开发C语言 无废话C#设计模式之二十一:Visitor 阅读

无废话C#设计模式之二十一:Visitor

 2009-04-02 08:22:55 来源:WEB开发网   
核心提示: 代码执行结果如下图:代码说明 代码从组合模式的例子修改过来,有一点乱,无废话C#设计模式之二十一:Visitor(2),一点一点来分析:l IVisitor是一个空接口,目的是为了抽象所有的访问者,我们使得它们直接和访问者的统一方法耦合,由访问者再适配不同的方法,抽象层次相当于Elemen

代码执行结果如下图:

无废话C#设计模式之二十一:Visitor 

代码说明

代码从组合模式的例子修改过来,有一点乱,一点一点来分析:

l         IVisitor是一个空接口,目的是为了抽象所有的访问者,抽象层次相当于Element。

l         IGameServerVisitor、IGameServiceVisitor以及IGameAreaVisitor定义了访问者的访问操作(操作接口)。在这里,我们并没有把它们合并为一个接口,因为访问者可能仅针对一部分元素,或一个层次的元素,不一定都针对所有元素。

l         StartGameVisitor、StopGameVisitor以及QueryPlayCountVisitor是具体的访问者。它们根据自己的需求实现不同的操作接口,虽然都是访问者但是它们的目的不太一样,见下。

l         Element类型就是抽象构件(抽象元素),它给组合对象以及单个对象提供了一个一致的接口,使得它们都能有一致的行为。唯一和组合模式不同的是,在这里定义了一个接受访问者的接口。

l         GameService、GameServer以及GameArea都是具体的元素。从组合角度来看,GameServer和GameArea是树枝,GameService是树叶。看一下Accept()方法,对于具体元素来说,它应该明确接受特定层次的访问者,如果类型转换正确的话,那么调用访问者的访问方法。

l         这个例子中的StartGameVisitor的目的是统一元素的接口。注意到GameService、GameServer以及GameArea中开启服务的方法都不同(并没有实现统一的接口),这样的话,高层的元素需要直接耦合低层元素的某个方法。通过访问者,我们使得它们直接和访问者的统一方法耦合,由访问者再适配不同的方法。可以从代码中以A打头的数字看出开启服务的整个流程。

上一页  1 2 3 4 5  下一页

Tags:废话 设计模式 二十一

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接