打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
设计模式之观察者模式
userphoto

2023.08.23 天津

关注

定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

类型:行为类模式

观察者模式的优点

        观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样,对于两者来说都比较容易进行扩展。

        观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比 较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。

1、创建观察者执行方法接口

public interface Observe{

    void Update();

}

2、创建通知者抽象接口、方法

public abstract class Subject{

    private Listobserves = new List();

    public void Add(Observe observe)

    {

        observes.Add(observe);

    }

   public void Delete(observe)

  {

        observes.Remove(observe);

  }

 public void Notify()

  {

        foreach(var item in observes)

       {

            item.Update();

       }

  }

}

3、具体通知者名称

public class ContractSubject{

    public string SubjectState{get;set;}

}

4、具体观察者实现

public class ContractObserve:Observe{

    private ConstractSubject constractSubject;

    public string Name{get;set;}

    public ConstractObserve(ConstractSubject constractSubject)

   {

        constractSubject = constractSubject;

   }

  public void Update()

  {

        Console.Write("名字{0}执行{1}状态",Name,constractSubject.SubjectState);

  }

}

5、控制台调用

ConstractSubject constractSubject = new ConstractSubject();

ConstractObserve constractObserve = new ConstractObserve(constractSubject ,"wangjx");

ConstractObserve constractObserve = new ConstractObserve(constractSubject ,"lili");

constractSubject.Add(constractObserve );

constractSubject.SubjectState="开始"

constractSubject.Notify();
//日志打印:
//名字wangjx执行开始状态
//名字lili执行开始状态

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
委托和设计模式(2)(上)
设计模式之(观察者模式) - 设计模式(技),设计模式,观察者,夜雨飘零,花自飘零水自流
观察者模式(Observer Pattern)
设计模式之:解剖观察者模式
Net设计模式实例之观察者模式(Observer Pattern)
使用Observer模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服