• 访问者模式


     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 "腾讯";
                }
    
            }
        }
  • 相关阅读:
    BZOJ4896 THUSC2016补退选(trie)
    BZOJ4892 Tjoi2017dna(后缀数组)
    BZOJ4890 Tjoi2017城市
    BZOJ4888 Tjoi2017异或和(树状数组)
    BZOJ4887 Tjoi2017可乐(动态规划+矩阵快速幂)
    BZOJ4883 棋盘上的守卫(环套树+最小生成树)
    BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
    BZOJ4878 挑战NP-Hard(dfs树)
    BZOJ5466 NOIP2018保卫王国(倍增+树形dp)
    BZOJ4873 Shoi2017寿司餐厅(最小割)
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/3640963.html
Copyright © 2020-2023  润新知