博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习笔记--访问者模式
阅读量:7051 次
发布时间:2019-06-28

本文共 4773 字,大约阅读时间需要 15 分钟。

1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:29:39  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// Element说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public abstract class Element12     {13         public abstract void Accept(Visitor visitor);14     }15 }
View Code
1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:31:19  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// ConcreteElementA说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public class ConcreteElementA:Element12     {13         public override void Accept(Visitor visitor)14         {15             visitor.VisitConcreteElementA(this);16         }17 18         public void OperationA()19         { }20     }21 }
View Code
1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:31:52  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// ConcreteElementB说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public class ConcreteElementB:Element12     {13         public override void Accept(Visitor visitor)14         {15             visitor.VisitConcreteElementB(this);16         }17 18         public void OperationB()19         { }20     }21 }
View Code
1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:28:19  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// Visitor说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public abstract class Visitor12     {13         public abstract void VisitConcreteElementA(ConcreteElementA concreteElementA);14         public abstract void VisitConcreteElementB(ConcreteElementB concreteElementB);15     }16 }
View Code
1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:30:34  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// ConcreteVisitor1说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public class ConcreteVisitor1:Visitor12     {13         public override void VisitConcreteElementA(ConcreteElementA concreteElementA)14         {15             Console.WriteLine("{0}被{1}访问",concreteElementA.GetType().Name ,this.GetType().Name);16         }17 18         public override void VisitConcreteElementB(ConcreteElementB concreteElementB)19         {20             Console.WriteLine("{0}被{1}访问", concreteElementB.GetType().Name, this.GetType().Name);21         }22     }23 }
View Code
1 using System; 2  3 namespace Visitor 4 { 5     ///   6     /// 作者:bzyzhang 7     /// 时间:2016/6/4 6:34:58  8     /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9     /// ConcreteVisitor2说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10     ///  11     public class ConcreteVisitor2:Visitor12     {13         public override void VisitConcreteElementA(ConcreteElementA concreteElementA)14         {15             Console.WriteLine("{0}被{1}访问", concreteElementA.GetType().Name, this.GetType().Name);16         }17 18         public override void VisitConcreteElementB(ConcreteElementB concreteElementB)19         {20             Console.WriteLine("{0}被{1}访问", concreteElementB.GetType().Name, this.GetType().Name);21         }22     }23 }
View Code
1 using System; 2 using System.Collections.Generic; 3  4 namespace Visitor 5 { 6     ///   7     /// 作者:bzyzhang 8     /// 时间:2016/6/4 6:38:05  9     /// 博客地址:http://www.cnblogs.com/bzyzhang/10     /// ObjectStructure说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 11     ///  12     public class ObjectStructure13     {14         private List
elements = new List
();15 16 public void Attach(Element element)17 {18 elements.Add(element);19 }20 21 public void Detach(Element element)22 {23 elements.Remove(element);24 }25 26 public void Accept(Visitor visitor)27 {28 foreach (Element element in elements)29 {30 element.Accept(visitor);31 }32 }33 }34 }
View Code
1 namespace Visitor 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             ObjectStructure objectStructure = new ObjectStructure(); 8  9             objectStructure.Attach(new ConcreteElementA());10             objectStructure.Attach(new ConcreteElementB());11 12             ConcreteVisitor1 concreteVisitor1 = new ConcreteVisitor1();13             ConcreteVisitor2 concreteVisitor2 = new ConcreteVisitor2();14 15             objectStructure.Accept(concreteVisitor1);16             objectStructure.Accept(concreteVisitor2);17         }18     }19 }
View Code

 

转载于:https://www.cnblogs.com/bzyzhang/p/5558054.html

你可能感兴趣的文章
LINQ的ORM功能中对使用sp_executesql语句的存储过程的支持
查看>>
springMvc 的参数验证 BindingResult result 的使用
查看>>
hadoop主节点(NameNode)备份策略以及恢复方法
查看>>
fsync体会
查看>>
OpenCV 2.4.11 VS2012 Configuration
查看>>
快速排序
查看>>
【Unity】Collider随骨骼动画运动
查看>>
SVN 权限配置详细说明
查看>>
【SQL】在SQL Server中多表关联查询问题
查看>>
Elasticsearch 5.0 —— Head插件部署指南(Head目前支持5.0了!请不要看本篇文章了)...
查看>>
计算字符串相似度的简易算法
查看>>
24.4. 批量生成监控配置文件
查看>>
您知道这是微软什么时期的网页吗?!
查看>>
将不确定变为确定~真的是SqlDataReader引起的超时?
查看>>
TCP客户机-服务器
查看>>
Hibernate连接DB2的问题(已解决)
查看>>
I.MX6 dts 在哪里、怎么编译
查看>>
第 44 章 Chart 图表
查看>>
JQuery ztree 异步加载实践
查看>>
XOR算法的原理和实现
查看>>