当前位置: 首页 > news >正文

网站开发总结报告海阳seo排名优化培训

网站开发总结报告,海阳seo排名优化培训,苏州app开发定制,怎么把asp网站改成php观察者模式是一种软件设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,它的所有依赖者(观察者)都将得到通知并自动更新。这种模式通过解耦合主题和观察者来提高对象的灵活性。 定义 观察者模式…

观察者模式是一种软件设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,它的所有依赖者(观察者)都将得到通知并自动更新。这种模式通过解耦合主题和观察者来提高对象的灵活性。

定义
观察者模式包括一个主题(Subject)和多个观察者(Observer)。当主题的状态改变时,它会通知观察者并调用它们的特定方法,使得观察者可以自动更新。

应用场景
观察者模式常见于以下场景:
        1. 当一个对象的变化需要通知其他对象,而且你无法确切知道有多少个对象需要通知时,可以使用观察者模式。
        2. 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,这时使用观察者模式可以将这两者封装在独立的对象中,使它们各自独立地改变和复用。

优点
        1. 观察者模式降低了主题和观察者之间的耦合度,使得主题和观察者可以轻松地独立变化。
        2. 支持广播通信,观察者模式可以向多个对象同时发送通知。

缺点
        1. 如果观察者过多或通知机制过于复杂,容易导致性能问题。
        2. 如果观察者和主题之间存在循环依赖,可能会导致系统崩溃或出现死循环。

观察者模式是一种广泛应用的设计模式,在许多面向对象编程语言和框架中都有相应的实现,例如在事件处理、模型-视图-控制器 (MVC) 架构中都有观察者模式的影子。

Demo

        1.Subject类

internal abstract class SubjectBase{// 将所有观察者放入list集合private readonly List<Observer> observers = new List<Observer>();public event EventHandler<EventArgs> NotifyAllHandler;public virtual void NotifyAllObserver(){NotifyAllHandler?.Invoke(this, EventArgs.Empty);}/// <summary>/// 加入集合/// </summary>/// <param name="observer"></param>public virtual void AttachObserver(Observer observer){observers.Add(observer);}/// <summary>/// 从观察者列表中去除/// </summary>/// <param name="observer"></param>public virtual void RemoveObserver(Observer observer){observers.Remove(observer);}}
internal class Subject: SubjectBase{}

        2.Observer观察者抽象类

    /// <summary>/// 观察者抽象类/// </summary>internal abstract class Observer{protected SubjectBase _subject;/// <summary>/// 更新消息/// </summary>public abstract void Update(object? sender, EventArgs eventArgs);public virtual void SetSubject(SubjectBase subject){if (subject == _subject) return;if (this._subject != null){this._subject.RemoveObserver(this);this._subject.NotifyAllHandler -= Update;}this._subject = subject;this._subject.AttachObserver(this);this._subject.NotifyAllHandler += Update;}}

        3.具体观察者,需要继承Observer基类

internal class Observer_A : Observer{public override void Update(object? sender, EventArgs eventArgs){Console.WriteLine($"Observer_A");}}internal class Observer_B : Observer{public override void Update(object? sender, EventArgs eventArgs){Console.WriteLine($"Observer_B");}}

调用

// 发布类
SubjectBase subject = new Subject();// 观察者
Observer observerA = new Observer_A();
observerA.SetSubject(subject);
Observer observerB = new Observer_B();
observerB.SetSubject(subject);// 发布类间隔通知
await Task.Run(() =>
{while (true){subject.NotifyAllObserver();Console.WriteLine("====================================================");Thread.Sleep(3000);}
});

http://www.hengruixuexiao.com/news/52869.html

相关文章:

  • 带端口的服务器怎么做网站网盘资源免费观看
  • 怎么做动漫小广告视频网站长清区seo网络优化软件
  • 建立网站的费用成人大专
  • wordpress企业网站模版管理方面的培训课程
  • 俄语网站建设公司济南百度竞价
  • 建网站有什么用宁波seo网络推广多少钱
  • 会小二也是做会议网站的阿里大数据分析平台
  • 襄阳网站seo方法山东建站
  • 佛山o2o网站建设网络营销的优缺点
  • 珠海网络哈尔滨seo公司
  • 石家庄网站制作网页seo查询排名软件
  • 宝山网站建设淘宝推广怎么做
  • 上海网站建设备案号怎么恢复常用的网络营销推广方法有哪些
  • 定制网站建设公司天猫关键词排名怎么控制
  • 变装 Wordpress 小说北京seo供应商
  • 专业网站建设费用报价湖南网站定制
  • 网站建设和网站开发的区别中国国家培训网
  • cms网站设计营销软件站
  • 珠海市官网网站建设品牌如何出售自己的域名
  • wordpress 引用站长工具seo查询5g5g
  • 长春火车站咨询电话seo 视频
  • 长沙网站制作哪简述什么是网络营销
  • 无锡哪个网站好某一网站seo策划方案
  • 做网站用小图标在什么网下载seo技术培训广东
  • 怎么做自己的一个网站网络销售 市场推广
  • 做网站如何连数据库软文网站平台
  • 深圳h5模板建站磁力链
  • 美食杰网站的建设目的谷歌浏览器手机版官网下载
  • 网站建设的流程是什么意思广州关键词排名推广
  • 福田企业网站优化哪个好seoul是什么品牌