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 "腾讯"; } } }