zoukankan      html  css  js  c++  java
  • 三十.访问者模式

    访问者模式:

    Visitor:表示一个作用于某个对象结构中的各元素的操作。它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。

    知识点:

           访问者模式是所有模式中最复杂的一个。

           适用于数据结构相对稳定的系统(很少很少使用)。如人只有男人和女人

           它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

    Demo1

           //状态抽象类

        abstract class Action

        {

           //得到男人的结论

           public abstract void GetManConclusion(Man concreteElementA);

           //得到女人的结论

           public abstract void GetWomanConclusion(Woman concretElementB);

        }

           //成功

        class Success:Action

        {

           public override void GetManConclusion(Man concreteElementA)

            {

               //{0}被{1}访问

               Console.WriteLine("{0}{1}时,背后多半有一个伟大的女人。",

                    concreteElementA.GetType().Name,this.GetType().Name);

           }

           public override void GetWomanConclusion(Woman concretElementB)

           {

                Console.WriteLine("{0}{1}时,背后多半有一个失败的男人。",

                    concretElementB.GetType().Name,this.GetType().Name);

           }

        }

       //失败

       //恋爱

       //其他例子

           //抽象类

        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);

           }

        }

           //对象结构。用于对比男女在不同的状态

        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);

               }

           }

        }

  • 相关阅读:
    Docker 命令收集
    Linux环境变量总结
    Docker 安装Hadoop HDFS命令行操作
    Docker 搭建Spark 依赖singularities/spark:2.2镜像
    Docker 搭建Spark 依赖sequenceiq/spark:1.6镜像
    kill命令
    每天一个linux命令:ps命令
    swoole执行外部程序称为进程
    php休眠微秒
    php监控文件变化
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815263.html
Copyright © 2011-2022 走看看