博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
访问者模式
阅读量:5265 次
发布时间:2019-06-14

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

代码1:访问者

//状态    abstract class Action    {        //得到男人结论或反应        public abstract void GetManConclusion(Man concreteElementA);        //得到女人结论或反应        public abstract void GetWomanConclusion(Woman concreteElementB);    }    //成功    class Success : Action    {        public override void GetManConclusion(Man concreteElementA)        {            Console.WriteLine("{0}{1}时,背后多半有一个伟大的女人。", concreteElementA.GetType().Name, this.GetType().Name);        }        public override void GetWomanConclusion(Woman concreteElementB)        {            Console.WriteLine("{0}{1}时,背后大多有一个不成功的男人。", concreteElementB.GetType().Name, this.GetType().Name);        }    }    //失败    class Failing : Action    {        public override void GetManConclusion(Man concreteElementA)        {            Console.WriteLine("{0}{1}时,闷头喝酒,谁也不用劝。", concreteElementA.GetType().Name, this.GetType().Name);        }        public override void GetWomanConclusion(Woman concreteElementB)        {            Console.WriteLine("{0}{1}时,眼泪汪汪,谁也劝不了。", concreteElementB.GetType().Name, this.GetType().Name);        }    }    //恋爱    class Amativeness : Action    {        public override void GetManConclusion(Man concreteElementA)        {            Console.WriteLine("{0}{1}时,凡事不懂也要装懂。", concreteElementA.GetType().Name, this.GetType().Name);        }        public override void GetWomanConclusion(Woman concreteElementB)        {            Console.WriteLine("{0}{1}时,遇事懂也装作不懂", concreteElementB.GetType().Name, this.GetType().Name);        }    }    //结婚    class Marriage : Action    {        public override void GetManConclusion(Man concreteElementA)        {            Console.WriteLine("{0}{1}时,感慨道:恋爱游戏终结时,‘有妻徒刑’遥无期。", concreteElementA.GetType().Name, this.GetType().Name);        }        public override void GetWomanConclusion(Woman concreteElementB)        {            Console.WriteLine("{0}{1}时,欣慰曰:爱情长跑路漫漫,婚姻保险保平安。", concreteElementB.GetType().Name, this.GetType().Name);        }    }

代码2:访问者操作的元素

//人    abstract class Person    {        //接受        public abstract void Accept(Action visitor);    }    //男人    class Man : Person    {        public override void Accept(Action visitor)        {            visitor.GetManConclusion(this);        }    }    //女人    class Woman : Person    {        public override void Accept(Action visitor)        {            visitor.GetWomanConclusion(this);        }    }

代码3:元素集合

//对象结构    class ObjectStructure    {        private IList
elements = new List
(); //增加 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); } } }

代码4:客户端代码

class Program    {        static void Main(string[] args)        {            ObjectStructure o = new ObjectStructure();            o.Attach(new Man());            o.Attach(new Woman());            Success v1 = new Success();            o.Display(v1);            Failing v2 = new Failing();            o.Display(v2);            Amativeness v3 = new Amativeness();            o.Display(v3);            Marriage v4 = new Marriage();            o.Display(v4);            Console.Read();        }    }

  

转载于:https://www.cnblogs.com/wuMing-dj/p/3361784.html

你可能感兴趣的文章
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>
Linux编程简介——gcc
查看>>
一种高效的序列化方式——MessagePack
查看>>
2019年春季学期第四周作业
查看>>
2019春第十周作业
查看>>
解决ThinkPHP关闭调试模式时报错的问题汇总
查看>>
【APT】SqlServer游标使用
查看>>
关于ExecuteNonQuery()返回值为-1
查看>>
Firefox修復QQ快速登錄
查看>>
PAT——1060. 爱丁顿数
查看>>
分布式技术追踪 2017年第二十期
查看>>
git添加公钥后报错sign_and_send_pubkey: signing failed: agent refused operation的解决办法
查看>>
Linux环境变量永久设置方法(zsh)
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
脑袋卡在窗子里
查看>>