首页 > 其他 > 详细

行为型设计模式之访问者模式

时间:2015-07-20 09:10:24      阅读:102      评论:0      收藏:0      [点我收藏+]
结构 技术分享
意图 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
适用性
  • 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Vi s i t o r 使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用Vi s i t o r 模式让每个应用仅包含需要用到的操作。
  • 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。

 

技术分享
 1  using System;
 2 
 3     abstract class Visitor 
 4     {
 5         abstract public void VisitElementA(ConcreteElementA a);
 6         abstract public void VisitElementB(ConcreteElementB b);
 7     }
 8 
 9     class ConcreteVisitor1 : Visitor
10     {
11         override public void VisitElementA(ConcreteElementA a)
12         {
13             
14         }
15 
16         override public void VisitElementB(ConcreteElementB b)
17         {
18             
19         }
20     }
21 
22     abstract class Element 
23     {
24         abstract public void Accept(Visitor v);
25     }
26 
27     class ConcreteElementA : Element 
28     {
29         public Visitor myVisitor;
30         override public void Accept(Visitor v)
31         {
32             myVisitor = v;            
33         }
34 
35         public void OperationA()
36         {
37             
38         }
39 
40         public void DoSomeWork()
41         {
42             // do some work here
43             // . . .
44 
45             // Get visitor to visit
46             myVisitor.VisitElementA(this);        
47 
48             // do some more work here
49             // . . .
50         }
51     }
52 
53     class ConcreteElementB : Element 
54     {
55         override public void Accept(Visitor v)
56         {
57             
58         }
59 
60         public void OperationB()
61         {
62             
63         }
64     }
65 
66     /// <summary>
67     ///    Summary description for Client.
68     /// </summary>
69     public class Client
70     {
71         public static int Main(string[] args)
72         {            
73             ConcreteElementA eA = new ConcreteElementA();
74             ConcreteElementB eB = new ConcreteElementB();
75             ConcreteVisitor1 v1 = new ConcreteVisitor1();
76 
77             eA.Accept(v1);
78             eA.DoSomeWork();
79 
80             return 0;
81         }
82     }
访问者模式

 

行为型设计模式之访问者模式

原文:http://www.cnblogs.com/ziranquliu/p/4660402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!