访问者模式

 class Program
    {
        static void Main(string[] args)
        {
            ObjectStructure obj = new ObjectStructure();
            网站 新浪 = new 新浪();
            网站 腾讯 = new 腾讯();
            obj.Add(新浪);
            //obj.Add(腾讯);
            浏览器访问者 谷歌 = new 谷歌();
            浏览器访问者 IE = new IE();
            obj.全部打开(谷歌);
            obj.全部打开(IE);
            Console.ReadKey();
        }
    }
    class ObjectStructure
    {
        List<网站> 网站 = new List<网站>();
        public void Add(网站 web)
        {
            网站.Add(web);
        }
        public void Remove(网站 web)
        {
            if (网站.Contains(web))
                网站.Remove(web);
        }
        public void 全部打开(浏览器访问者 浏览器)
        {
            foreach (var v in 网站)
            {
                v.打开网站(浏览器);
            }
        }
        public void 全部刷新(浏览器访问者 浏览器)
        {
            foreach (var v in 网站)
            {
                v.刷新网站(浏览器);
            }
        }
        public void 全部关闭(浏览器访问者 浏览器)
        {
            foreach (var v in 网站)
            {
                v.关闭网站(浏览器);
            }
        }
    }
    abstract class 浏览器访问者
    {
        public abstract string 访问者名称 { get; }
        public abstract void 访问(网站 web);
        public abstract void 刷新(网站 web);
        public abstract void 关闭(网站 web);
    }
    abstract class 网站
    {
        public abstract string 网站名称 { get; }
        public abstract void 打开网站(浏览器访问者 visit);
        public abstract void 刷新网站(浏览器访问者 visit);
        public abstract void 关闭网站(浏览器访问者 visit);
    }
    class 谷歌 : 浏览器访问者
    {
        public override void 访问(网站 web)
        {
            Console.WriteLine(访问者名称 + "要访问网站 " + web.网站名称);
        }

        public override void 刷新(网站 web)
        {
            Console.WriteLine(访问者名称 + "要刷新网站 " + web.网站名称);

        }

        public override void 关闭(网站 web)
        {
            Console.WriteLine(访问者名称 + " 要关闭网站 " + web.网站名称);

        }

        public override string 访问者名称
        {
            get { return "谷歌"; }
        }
    }
    class IE : 浏览器访问者
    {
        public override void 访问(网站 web)
        {
            Console.WriteLine(访问者名称 + "要访问网站 " + web.网站名称);

        }

        public override void 刷新(网站 web)
        {
            Console.WriteLine(访问者名称 + "要刷新网站 " + web.网站名称);

        }

        public override void 关闭(网站 web)
        {
            Console.WriteLine(访问者名称 + "要关闭网站 " + web.网站名称);
        }

        public override string 访问者名称
        {
            get { return "IE"; }
        }
    }
    class 新浪 : 网站
    {
        public override void 打开网站(浏览器访问者 visit)
        {
            visit.访问(this);
            Console.WriteLine(网站名称 + "网站被打开");
        }

        public override void 刷新网站(浏览器访问者 visit)
        {
            visit.刷新(this);
            Console.WriteLine(网站名称 + "网站被刷新");
        }

        public override void 关闭网站(浏览器访问者 visit)
        {
            visit.关闭(this);
            Console.WriteLine(网站名称 + "网站被关闭");
        }

        public override string 网站名称
        {
            get
            {
                return "新浪";
            }
        }
    }
    class 腾讯 : 网站
    {
        public override void 打开网站(浏览器访问者 visit)
        {
            visit.访问(this);
            Console.WriteLine(网站名称 + " 网站被打开");
        }

        public override void 刷新网站(浏览器访问者 visit)
        {
            visit.刷新(this);
            Console.WriteLine(网站名称 + " 网站被刷新");
        }

        public override void 关闭网站(浏览器访问者 visit)
        {
            visit.关闭(this);
            Console.WriteLine(网站名称 + " 网站被关闭");
        }

        public override string 网站名称
        {
            get
            {
                return "腾讯";
            }

        }
    }

 

posted @ 2014-04-02 16:16  Rookier  阅读(282)  评论(0编辑  收藏  举报