15.观察者模式
public abstract class Blog// 订阅号抽象类
{
private List<IObserver> observers = new List<IObserver>();
public string Symbol { get; set; }//描写订阅号的相关信息
public string Info { get; set; }//描写此次update的信息
public Blog(string symbol, string info)
{
Symbol = symbol;
Info = info;
}
// 对同一个订阅号,新增和删除订阅者的操作
public void AddObserver(IObserver ob)
{
observers.Add(ob);
}
public void RemoveObserver(IObserver ob)
{
observers.Remove(ob);
}
public void Update()
{
foreach (IObserver ob in observers)// 遍历订阅者列表进行通知
{
if (ob != null)
{
ob.Receive(this);
}
}
}
}
public class MyBlog : Blog// 具体订阅号类
{
public MyBlog(string symbol, string info)
: base(symbol, info) { }
}
public interface IObserver// 订阅者接口
{
void Receive(Blog tenxun);
}
public class Subscriber : IObserver// 具体的订阅者类
{
public string Name { get; set; }
public Subscriber(string name)
{
Name = name;
}
public void Receive(Blog xmfdsh)
{
Console.WriteLine("订阅者 {0} 观察到了{1}{2}", Name, xmfdsh.Symbol, xmfdsh.Info);
}
}
class Program
{
static void Main(string[] args)
{
Blog xmfdsh = new MyBlog("xmfdsh", "发布了一篇新博客");
xmfdsh.AddObserver(new Subscriber("张三"));
xmfdsh.AddObserver(new Subscriber("李四"));
xmfdsh.AddObserver(new Subscriber("王五"));
xmfdsh.AddObserver(new Subscriber("赵六"));
xmfdsh.Update();//更新信息
Console.ReadLine();//输出结果,此时所有的订阅者都已经得到博客的新消息
}
}