c#设计模式之观察者模式

很多观察者想要观察被观察者的状态,因此委托⼀个通知者去观察,观察到变化后,通知给所有参与的观察者 

class Program
{
 static void Main(string[] args)
 {
 ConcreteSubject s = new ConcreteSubject();
 s.Attach(new ConcreteObserver(s, "X"));
 s.Attach(new ConcreteObserver(s, "Y"));
 s.Attach(new ConcreteObserver(s, "Z"));
 s.SubjectState = "ABC";
 s.Notify();
 Console.Read();
 }
}
abstract class Subject
{
 private IList<Observer> observers = new List<Observer>();
 //增加观察者
 public void Attach(Observer observer)
 {
observers.Add(observer);
 }
 //移除观察者
 public void Detach(Observer observer)
 {
 observers.Remove(observer);
 }
 //通知
 public void Notify()
 {
 foreach (Observer o in observers)
 {
 o.Update();
 }
 }
}
//具体通知者
class ConcreteSubject : Subject
{
 private string subjectState;
 //具体通知者状态
 public string SubjectState
 {
 get { return subjectState; }
 set { subjectState = value; }
 }
}
abstract class Observer
{
 public abstract void Update();
}
class ConcreteObserver : Observer
{
 private string name;
 private string observerState;
 private ConcreteSubject subject;
 public ConcreteObserver(
 ConcreteSubject subject, string name)
 {
 this.subject = subject;
 this.name = name;
 }
 //更新
public override void Update()
 {
 observerState = subject.SubjectState;
 Console.WriteLine("观察者{0}的新状态是{1}",
 name, observerState);
 }
 public ConcreteSubject Subject
 {
 get { return subject; }
 set { subject = value; }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值