var ob1 = new ConcreteObserver() { Name = "高俅", Likes = new List<string>() { "八卦" } };
var ob2 = new ConcreteObserver() { Name = "小小", Likes = new List<string>() { "科技" } };
var ob3 = new ConcreteObserver() { Name = "林三", Likes = new List<string>() { "汽车" } };
ConcreteSubject sub = new ConcreteSubject() { };
sub.Register(ob1);
sub.Register(ob2);
sub.Register(ob3);
Console.WriteLine("--------------------------------");
sub.Publish("最近好多明星结婚啦!", "八卦");
Console.WriteLine("--------------------------------");
sub.Publish("华为研发出新电池!", "科技");
Console.WriteLine("--------------------------------");
sub.Remove(ob2);
Console.WriteLine("--------------------------------");
sub.Publish("众泰出保时捷款了!", "汽车");
Console.ReadKey();
看Subject类, 是否有些熟悉的赶脚, 好像事件内部的封装方式.
public delegate void Read(string news);
/// <summary>
/// 具体主题类 -- 今日头条
/// </summary>
public class ConcreteSubject
{
public event Read Reads;
public string News { get; set; }
public void Publish(string news)
{
this.News = news;
Console.WriteLine("推送主题新闻为:" + this.News);
Reads(news);
}
}
var ob1 = new ConcreteObserver() { Name = "高俅" };
var ob2 = new ConcreteObserver() { Name = "小小" };
var ob3 = new ConcreteObserver() { Name = "林三" };
ConcreteSubject sub = new ConcreteSubject() { };
sub.Reads += ob1.Read;
sub.Reads += ob2.Read;
sub.Reads += ob3.Read;
sub.Publish("最近好多明星结婚啦!");
Console.WriteLine("--------------------------------");
sub.Reads -= ob2.Read;
sub.Publish("众泰出保时捷款了!");
Console.ReadKey();
public delegate void Read(ConcreteSubject subject);
public class Subject{ }
/// <summary>
/// 具体主题类 -- 今日头条
/// </summary>
public class ConcreteSubject : Subject
{
public event Read Reads;
public string News { get; set; }
private string category;
public void Publish(string news, string category)
{
this.News = news;
this.category = category;
Console.WriteLine("推送新闻({0}):{1}", this.category, this.News);
Reads(this);
}
public string GetCategory()
{
return this.category;
}
}