访问者模式 妖狐艹你老母 2021-12-09 00:55 263阅读 0赞 ## 前言 ## **访问者模式(Visitor)**,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。 ## 一、状态抽象类和人的抽象类 ## 1 //状态抽象类 2 public abstract class Action 3 { 4 //得到男人结论或反应 5 public abstract void GetManConclusion(Man concreteA); 6 //得到女人结论或反应 7 public abstract void GetWomanConclusion(Woman concreteB); 8 } 1 //人抽象类 2 public abstract class Person 3 { 4 //接受 5 public abstract void Accept(Action vistor); 6 } ## 二、具体的状态类 ## 1 public class Success : Action 2 { 3 public override void GetManConclusion(Man concreteA) 4 { 5 Console.WriteLine("{0}{1}时,有一个伟大的女人", concreteA.GetType().Name, this.GetType().Name); 6 } 7 8 public override void GetWomanConclusion(Woman concreteB) 9 { 10 Console.WriteLine("{0}{1}时,有一个花心的男人", concreteB.GetType().Name, this.GetType().Name); 11 } 12 } 1 public class Fail : Action 2 { 3 public override void GetManConclusion(Man concreteA) 4 { 5 Console.WriteLine("{0}{1}时,有一个败家的女人", concreteA.GetType().Name, this.GetType().Name); 6 } 7 8 public override void GetWomanConclusion(Woman concreteB) 9 { 10 Console.WriteLine("{0}{1}时,有一个勒色的男人", concreteB.GetType().Name, this.GetType().Name); 11 } 12 } ## 三、男人和女人类 ## 首先在客户程序中将具体状态座位参数传递给“男人” 类完成了一次分派,然后“男人”类调用座位参数的“具体状态” 中的方法“男人反应”,同时将自己(this)作为参数传递进去。这便完成了第二次分派。 1 public class Man : Person 2 { 3 4 public override void Accept(Action vistor) 5 { 6 vistor.GetManConclusion(this); 7 } 8 } 1 public class Woman : Person 2 { 3 public override void Accept(Action vistor) 4 { 5 vistor.GetWomanConclusion(this); 6 } 7 } ## 四、对象结构类 ## 对象结构类由于总是需要“男人” 与“女人” 在不同状态的对比,所以我们需要一个“对象结构” 类来针对不同的“状态” 遍历“男人”与“女人”,得到不同的反应。 1 //对象结构类 2 public class ObjStructure 3 { 4 private List<Person> elements = new List<Person>(); 5 6 public void Attach(Person element) 7 { 8 elements.Add(element); 9 } 10 public void Remove(Person element) 11 { 12 elements.Remove(element); 13 } 14 public void Display(Action vistor) 15 { 16 foreach(var i in elements) 17 { 18 i.Accept(vistor); 19 } 20 } 21 } ## 五、客户端代码 ## 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 ObjStructure o = new ObjStructure(); 6 o.Attach(new Man()); 7 o.Attach(new Woman()); 8 9 //成功的反应 10 Success e1 = new Success(); 11 o.Display(e1); 12 13 //失败时的反应 14 Fail e2 = new Fail(); 15 o.Display(e2); 16 17 Console.Read(); 18 } 19 } ## 总结 ## 1、访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,是的操作集合可以相对自由地演化。 2、访问者模式的目的是要把处理从数据结构分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。 3、增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。 ** 参考模式:**大话设计模式
相关 java 访问者模式_设计模式之访问者模式 public interface Visitor \{ public void visitString(StringElement stringE); public voi 今天药忘吃喽~/ 2022年11月05日 15:55/ 0 赞/ 236 阅读
相关 访问者模式 一、前言 `能力,是你前行的最大保障` 年龄会不断的增长,但是什么才能让你不慌张。一定是能力,即使是在一个看似还很安稳的工作中也是一样,只有拥有`能留下的本事`和`跳出 喜欢ヅ旅行/ 2022年10月17日 10:36/ 0 赞/ 186 阅读
相关 访问者模式 include <iostream> include <list> include <string> using namespace std; 川长思鸟来/ 2022年09月24日 11:25/ 0 赞/ 150 阅读
相关 访问者模式 1.使用场景: 在一个集合中有一些不同的子类对象,需要分别对这些子类对象做处理。常常应用于XML文档的解析、编辑器的解析等。 2.UML表示: 2.1 Visit 比眉伴天荒/ 2022年05月31日 09:27/ 0 赞/ 215 阅读
相关 访问者模式 提供一个访问者对象,这个对象可以通过传入的不同类调用不同方法 像这样: function accept(foo $foo){ $method="visit" ╰半橙微兮°/ 2021年12月21日 00:59/ 0 赞/ 225 阅读
相关 访问者模式 前言 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。 一、状态抽象类和人的 妖狐艹你老母/ 2021年12月09日 00:55/ 0 赞/ 264 阅读
相关 访问者模式 推荐文章:[https://www.cnblogs.com/edisonchou/p/7247990.html][https_www.cnblogs.com_edisoncho 小灰灰/ 2021年11月11日 02:28/ 0 赞/ 265 阅读
相关 访问者模式 21.访问者模式 ![70][] public abstract class Element { public abst 刺骨的言语ヽ痛彻心扉/ 2021年09月17日 00:08/ 0 赞/ 419 阅读
相关 访问者模式 一 点睛 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 二 结构 访问者模式包含以下主要角 电玩女神/ 2021年07月24日 16:40/ 0 赞/ 394 阅读
相关 访问者模式 访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式... 小灰灰/ 2020年06月13日 05:40/ 0 赞/ 615 阅读
还没有评论,来说两句吧...