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