博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载] C#面向对象设计模式纵横谈——24 Visitor访问者模式
阅读量:6879 次
发布时间:2019-06-26

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

主讲:李建忠

来源:

 

 

1:  public abstract class Shape
2:  {
3:      public abstract void Draw();
4:   
5:      //预料到将来可能会引入新的操作
6:      public abstract void Accept(ShapeVisitor v);
7:  }
8:   
9:  public abstract class ShapeVisitor
10:  {
11:      public abstract void Visit(Rectangle shape);    //#1
12:      public abstract void Visit(Circle shape);    //#2
13:      public abstract void Visit(Line shape);    //#3
14:  }
15:   
16:  public class MyVisitor:ShapeVisitor
17:  {
18:      public override void Visit(Rectangle shape);    //#1
19:      {
20:          //增加对Rectangle的操作
21:      }
22:   
23:      public override void Visit(Circle shape);    //#2
24:      {
25:          //增加对Circle的操作
26:      }
27:   
28:      public override void Visit(Line shape);    //#3
29:      {
30:          //增加对Line的操作
31:      }
32:  }
33:   
34:  public class Rectangle:Shape
35:  {
36:      public override void Draw()
37:      {
38:          //...
39:      }
40:   
41:      public override void Accept(ShapeVisitor v)
42:      {
43:          v.Visit(this);    //调用 #1
44:      }
45:  }
46:   
47:  public class Circle:Shape
48:  {
49:      public override void Draw()
50:      {
51:          //...
52:      }
53:   
54:      public override void Accept(ShapeVisitor v)
55:      {
56:          v.Visit(this);    //调用 #2
57:      }
58:  }
59:   
60:  public class Line:Shape
61:  {
62:      public override void Draw()
63:      {
64:          //...
65:      }
66:   
67:      public override void Accept(ShapeVisitor v)
68:      {
69:          v.Visit(this);     //调用 #3
70:      }
71:  }
72:   
73:  class App
74:  {
75:      ShapeVisitor visitor;
76:      public App(ShapeVisitor visitor)
77:      {
78:          this.visitor=visitor;
79:      }
80:   
81:      public static void Process(Shape shape)
82:      {
83:          //两处多态:
84:          //1.Accept方法的调用对象 shape
85:          //2.Accept等方法的参数 visitor
86:          shape.Accept(visitor);
87:      }
88:  }
89:   
90:  App app=new App(new MyVisitor());
91:  app.Process(new Line());

 

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/10/18/2728995.html

你可能感兴趣的文章
Scapy小总结
查看>>
GP 查询表字段信息(分布键等)
查看>>
一篇万字长文讲清如何做数据治理
查看>>
Spring MVC 响应结果有反斜杠转义字符+双引号
查看>>
小菜学设计模式——职责链模式
查看>>
初探WiFi - Wifi开关、信息扫描
查看>>
意气奋发 少年愁!!
查看>>
Android Studio 设置代码提示不区分大小写
查看>>
简单易懂的Builder模式
查看>>
nova vnc配置
查看>>
SQL 查询一个字段所有的之出现次数大于等于2的条数
查看>>
JVM 垃圾回收器工作原理及使用实例介绍
查看>>
在oracle中恢复删除的表 FLASHBACK TABLE
查看>>
maven中导入本地jar包
查看>>
1、npm命令
查看>>
Cassandra1.2学习笔记
查看>>
让技术人员看得懂的流程(2)——用例模型
查看>>
写了个go语言版的chardet包
查看>>
最好的多层次框架,提供端到端的解决方案DATA ABSTRACT控件
查看>>
什么是php递归函数及简单实例讲解
查看>>