zoukankan      html  css  js  c++  java
  • 【设计模式】20.访问者模式

    说明:比如一开始有3个是执行Print方法,后来改需求了,要加多个时间显示,就需要3个都修改,加上访问者,客户端是由访问者去执行这3个类的方法。客户端无需改变代码。

    实现:

    public abstract class ABS_Element
        {
            public abstract void Accept(IVistor v);
            public abstract void Print();
        }
    
        public class ElementA : ABS_Element
        {
            public override void Accept(IVistor v)
            {
                //调用访问者
            }
            public override void Print()
            {
                //由访问者类来执行的方法
            }
        }
    
        public class ElementB : ABS_Element
        {
            public override void Accept(IVistor v)
            {
                //调用访问者
            }
            public override void Print()
            {
                //由访问者执行的方法
            }
        }
    
        public interface IVistor
        {
            //几个访问者类,加几个。
            void View(ElementA a);
            void View(ElementB b);
        }
    
        /// <summary>
        /// 访问者类
        /// </summary>
        public class Vistor : IVistor
        {
            public void View(ElementA a) {
                a.Print();
            }
    
            public void View(ElementB b) {
                b.Print();
            }
        }
    
        /// <summary>
        /// 我的
        /// </summary>
        public class MyList
        {
            private ArrayList eleList = new ArrayList();
    
            public ArrayList lists { get { return eleList; } }
    
            public void action()
            {
                foreach(ABS_Element e in eleList)
                {
                    e.Accept(new Vistor());
                }
            }
        }
    
        public class test
        {
            public void start()
            {
                //将节点添加进集合
                MyList obj1 = new MyList();
                obj1.lists.Add(new ElementA());
                obj1.lists.Add(new ElementA());
                obj1.lists.Add(new ElementB());
    
                //开始访问
                obj1.action();
    
            }
        }
  • 相关阅读:
    学到了林海峰,武沛齐讲的Day20 装饰器
    学到了林海峰,武沛齐讲的Day19 迭代细讲
    学到了林海峰,武沛齐讲的Day18 迭代
    学到了林海峰,武沛齐讲的Day18-4 文件操作
    hdu1106 java字符串分割
    hdu1282 回文数猜想
    hud1047 java大数忽略空格
    hdu1018 阶乘位数的数学原理
    hdu1715 java解大菲波数
    hdu1316 java解高精度斐波数
  • 原文地址:https://www.cnblogs.com/laokchen/p/13544129.html
Copyright © 2011-2022 走看看