class Program
{
static void Main(string[] args)
{
Subject subject = new Subject();
// Observer1 takes a subscription to the store
Observer observer1 = new Observer("Observer 1");
subject.Subscribe(observer1);
// Observer2 also subscribes to the store
subject.Subscribe(new Observer("Observer 2"));
subject.Inventory++;
// Observer1 unsubscribes and Observer3 subscribes to notifications.
subject.Unsubscribe(observer1);
subject.Subscribe(new Observer("Observer 3"));
subject.Inventory++;
Console.ReadLine();
}
}
/// <summary>
/// 订阅信息接口
/// </summary>
interface ISubject
{
/// <summary>
/// 订阅信息
/// </summary>
/// <param name="observer">要观察的目标对象</param>
void Subscribe(Observer observer);
void Unsubscribe(Observer observer);
/// <summary>
/// 消息通知
/// </summary>
void Notify();
}
public class Subject : ISubject
{
private List<Observer> observers = new List<Observer>();
private int _int;
public int Inventory
{
get
{
return _int;
}
set
{
// Just to make sure that if there is an increase in inventory
// then only we are notifying the observers.
if (value > _int)
Notify();
_int = value;
}
}
public void Subscribe(Observer observer)
{
observers.Add(observer);
}
public void Unsubscribe(Observer observer)
{
observers.Remove(observer);
}
public void Notify()
{
observers.ForEach(x => x.Update());
}
}
interface IObserver
{
void Update();
}
public class Observer : IObserver
{
public string ObserverName { get; private set; }
public Observer(string name)
{
this.ObserverName = name;
}
public void Update()
{
Console.WriteLine("{0}: A new product has arrived at the store", this.ObserverName);
}
}
输出如下内容:
![](https://i-blog.csdnimg.cn/blog_migrate/f512887119163e79bf54335f9d0418c9.png)