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

网站开发总结报告平台推广渠道

网站开发总结报告,平台推广渠道,wordpress分享qq,南沙门户网站建设观察者模式是一种软件设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,它的所有依赖者(观察者)都将得到通知并自动更新。这种模式通过解耦合主题和观察者来提高对象的灵活性。 定义 观察者模式…

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

定义
观察者模式包括一个主题(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.15wanjia.com/news/18863.html

相关文章:

  • wordpress快站怎么样网站优化seo培
  • 找供应商去哪个网站百度快照替代
  • 网站开发的规格描述百度关键词推广方案
  • 如何做医药类网站百度词条搜索排行
  • 公司网站首页导航html贵州seo推广
  • 如何做门户网站电商网站设计论文
  • 北海教网站建设百度广告推广
  • 学校为什么要做网站hao123主页
  • 做钓鱼网站判刑哈尔滨网络公司
  • 动漫制作专业可以考公务员吗seo网络推广优化
  • 如何做产品众筹网站重庆网站搜索引擎seo
  • 网站管理员密码忘记培训心得简短50字
  • html语言做网站南宁seo结算
  • 网站设计书怎么写陕西seo关键词优化外包
  • 有什么网站可以做商品展示的吗网络营销的方式有哪些
  • 哪个网站上可以做代打今日腾讯新闻最新消息
  • 网站建设 开题报告百度大数据
  • 做企业网站百度搜索大数据查询
  • 股票场外期权网站开发合肥网站优化平台
  • 老外做的中国方言网站国外引流推广软件
  • SEO优化之如何做网站URL优化地推网推平台
  • 杭州杭州网站建设搜索引擎哪个好
  • 网站建设框架怎么做电商培训机构靠谱吗
  • 铜陵网站建设维护网站开发技术
  • 大型网站改版公众号推广渠道
  • 腾讯云点播做视频网站一个企业该如何进行网络营销
  • 网站流行趋势上海公司网站seo
  • 用PS做网站搜索框网页怎么搜索关键词
  • 网站开发群seo图片优化
  • 枣庄高端网站定制企业关键词优化推荐