访问者模式

作者:追风剑情 发布于:2016-6-1 18:09 分类:设计模式

访问者模式

using System;
using System.Collections.Generic;
using System.Text;
/************************************************************************/
/* 访问者模式                                                           */
/************************************************************************/
namespace VisitorTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Visitor1 v1 = new Visitor1();

            List<IPrint> list = new List<IPrint>();
            list.Add(new A());
            list.Add(new B());

            for (int i = 0; i < list.Count; i++)
            {
                IPrint iprint = list[i];
                iprint.Print(v1);
            }

            Console.Read();
        }
    }

    interface Visitor
    {
        //利用多态特性进行判断调用,省去了程序员手动判断类型。
        void Visit(A a);
        void Visit(B b);
    }

    //定义一种访问者
    class Visitor1 : Visitor
    {
        public void Visit(A a)
        {
            //在不修改A类的前提下,进行额外处理
            Console.Write("this is: ");
            a.PrintA();
        }

        public void Visit(B b)
        {
            //在不修改B类的前提下,进行额外处理
            Console.Write("Hello ");
            b.PrintB();
        }
    }

    interface IPrint
    {
        void Print(Visitor v);
    }

    //实现IPrint接口是为了方便遍历
    class A : IPrint
    {
        public void PrintA()
        {
            Console.WriteLine("A");
        }

        public void Print(Visitor v)
        {
            //之所以要让访问者来调用PrintA(),是因为想增加额外操作。
            v.Visit(this);
        }
    }

    class B : IPrint
    {
        public void PrintB()
        {
            Console.WriteLine("B");
        }

        public void Print(Visitor v)
        {
            v.Visit(this);
        }
    }
}

 

运行效果

111111111.png

 

标签: Algorithms

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号