设计模式(二十四)——访问者模式
来源:互联网 发布:网络大专多少钱一年 编辑:程序博客网 时间:2024/06/07 14:05
访问者模式(Visitor)
访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
代码
1.代码如下:
抽象人类
using System;namespace Visitor{//抽象人类public abstract class Person{//接受public abstract void Accept(Action visitor);}}
男人
using System;namespace Visitor{//男人public class Man:Person{public override void Accept (Action visitor){visitor.GetManConclusion (this);}}}
女人
using System;namespace Visitor{//女人public class Woman:Person{public override void Accept (Action visitor){visitor.GetWomanConclusion (this);}}}
状态抽象类
using System;namespace Visitor{//状态抽象类public abstract class Action{//得到男人结论或反应public abstract void GetManConclusion(Person concreteElementA);//得到女人结论或反应public abstract void GetWomanConclusion(Person concreteElementA);}}
成功状态类
using System;namespace Visitor{//成功状态类public class Success:Action{public override void GetManConclusion (Person concreteElementA){Console.WriteLine ("{0}{1}时,背后多半有一个伟大的女人。", concreteElementA.GetType ().Name, this.GetType ().Name);}public override void GetWomanConclusion (Person concreteElementA){Console.WriteLine ("{0}{1}时,背后大多有一个不成功的男人。", concreteElementA.GetType ().Name, this.GetType ().Name);}}}
失败状态类
using System;namespace Visitor{//失败状态类public class Failing:Action{public override void GetManConclusion (Person concreteElementA){Console.WriteLine ("{0}{1}时,闷头喝酒,谁也不用劝。", concreteElementA.GetType ().Name, this.GetType ().Name);}public override void GetWomanConclusion (Person concreteElementA){Console.WriteLine ("{0}{1}时,眼泪汪汪,谁也劝不了。", concreteElementA.GetType ().Name, this.GetType ().Name);}}}
对象结构
using System;using System.Collections.Generic;namespace Visitor{//对象结构public class ObjectStructure{private IList<Person> elements=new List<Person>();//增加public void Attach(Person element){elements.Add (element);}//移除public void Detach(Person element){elements.Remove (element);}//查看显示public void Display(Action visitor){foreach (Person e in elements) {e.Accept (visitor);}}}}2.客户端代码如下:
客户端
using System;namespace Visitor{class MainClass{public static void Main (string[] args){ObjectStructure objectStructure = new ObjectStructure ();objectStructure.Attach (new Man ());objectStructure.Attach (new Woman ());//成功时的反应Success v1=new Success();objectStructure.Display (v1);//失败时的反应Failing v2=new Failing();objectStructure.Display (v2);}}}3.运行结果
UML图
阅读全文
1 0
- 设计模式笔记(二十四) —— 访问者模式
- 设计模式(二十四)——访问者模式
- 设计模式(二十四) 访问者模式
- 二十四、访问者模式——设计模式学习笔记
- Java设计模式《二十四》访问者模式
- (二十四)访问者模式
- 设计模式学习笔记二十四(Visitor访问者模式)
- 设计模式实现(二十四)---访问者模式(Visitor)
- 设计模式讲解与代码实践(二十四)——访问者
- 设计模式—访问者模式(二十三)
- 设计模式之二十四:访问者模式(Visitor)
- JAVA设计模式十四--Visitor(访问者模式)
- JAVA设计模式十四:--Visitor(访问者模式)
- 二、Java设计模式——访问者模式
- 二、Java设计模式——访问者模式
- JAVA设计模式(二十二)——访问者模式
- 设计模式学习笔记(二十)—Visitor访问者模式
- 设计模式—备忘录模式(十四)
- C++之存储空间的动态分配和释放
- HDU 3549 Flow Problem
- OutputDebugString完美封装
- 接口 登录、注册、信息
- 梯度下降法的步长到底怎么确定?
- 设计模式(二十四)——访问者模式
- hadoop教程网站
- 最小二乘、ridge、lasso的概率论原理
- JDBC 写入mysql 中文乱码 及找不到表
- Mac下Apache修改默认站点的目录
- 剑指offer—在O(1)时间删除链表结点(18-1)
- Android开发图片水平旋转180度
- 基于OpenCV的视频图像组态 (11): CEF浏览器与C++通信
- 第五章 深度神经网络为何很难训练