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

网站建设如何不被忽悠网站前端设计理念

网站建设如何不被忽悠,网站前端设计理念,企业商网如何建设,有关外贸的网站有哪些定义 观察者模式是一种行为设计模式#xff0c;它定义了对象之间的一对多依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于它的对象都会得到通知并自动更新。观察者模式的核心在于解耦主题#xff08;被观察者#xff09;和观察者之间的依赖关系。 …定义 观察者模式是一种行为设计模式它定义了对象之间的一对多依赖关系当一个对象的状态发生改变时所有依赖于它的对象都会得到通知并自动更新。观察者模式的核心在于解耦主题被观察者和观察者之间的依赖关系。 正确写法 假设我们有一个天气预报系统当天气变化时需要通知多个订阅者如手机应用、网站等。 using System; using System.Collections.Generic;// 被观察者接口 public interface ISubject {void RegisterObserver(IObserver observer);void RemoveObserver(IObserver observer);void NotifyObservers(); }// 观察者接口 public interface IObserver {void Update(string weatherInfo); }// 具体被观察者 public class WeatherStation : ISubject {private ListIObserver observers new ListIObserver();private string weatherInfo;public void SetWeatherInfo(string info){this.weatherInfo info;NotifyObservers();}public void RegisterObserver(IObserver observer){observers.Add(observer);}public void RemoveObserver(IObserver observer){observers.Remove(observer);}public void NotifyObservers(){foreach (var observer in observers){observer.Update(weatherInfo);}} }// 具体观察者 public class MobileApp : IObserver {public void Update(string weatherInfo){Console.WriteLine($Mobile App received: {weatherInfo});} }public class Website : IObserver {public void Update(string weatherInfo){Console.WriteLine($Website received: {weatherInfo});} }// 客户端代码 class Program {static void Main(string[] args){WeatherStation weatherStation new WeatherStation();IObserver mobileApp new MobileApp();IObserver website new Website();weatherStation.RegisterObserver(mobileApp);weatherStation.RegisterObserver(website);weatherStation.SetWeatherInfo(Sunny and warm);weatherStation.RemoveObserver(mobileApp);weatherStation.SetWeatherInfo(Cloudy with a chance of rain);} }类图 #mermaid-svg-n4cz8nR4OqLJK9JC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-n4cz8nR4OqLJK9JC .error-icon{fill:#552222;}#mermaid-svg-n4cz8nR4OqLJK9JC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-n4cz8nR4OqLJK9JC .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-n4cz8nR4OqLJK9JC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-n4cz8nR4OqLJK9JC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-n4cz8nR4OqLJK9JC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-n4cz8nR4OqLJK9JC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-n4cz8nR4OqLJK9JC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-n4cz8nR4OqLJK9JC .marker.cross{stroke:#333333;}#mermaid-svg-n4cz8nR4OqLJK9JC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-n4cz8nR4OqLJK9JC g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-n4cz8nR4OqLJK9JC g.classGroup text .title{font-weight:bolder;}#mermaid-svg-n4cz8nR4OqLJK9JC .nodeLabel,#mermaid-svg-n4cz8nR4OqLJK9JC .edgeLabel{color:#131300;}#mermaid-svg-n4cz8nR4OqLJK9JC .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-n4cz8nR4OqLJK9JC .label text{fill:#131300;}#mermaid-svg-n4cz8nR4OqLJK9JC .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-n4cz8nR4OqLJK9JC .classTitle{font-weight:bolder;}#mermaid-svg-n4cz8nR4OqLJK9JC .node rect,#mermaid-svg-n4cz8nR4OqLJK9JC .node circle,#mermaid-svg-n4cz8nR4OqLJK9JC .node ellipse,#mermaid-svg-n4cz8nR4OqLJK9JC .node polygon,#mermaid-svg-n4cz8nR4OqLJK9JC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-n4cz8nR4OqLJK9JC .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-n4cz8nR4OqLJK9JC g.clickable{cursor:pointer;}#mermaid-svg-n4cz8nR4OqLJK9JC g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-n4cz8nR4OqLJK9JC g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-n4cz8nR4OqLJK9JC .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-n4cz8nR4OqLJK9JC .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-n4cz8nR4OqLJK9JC .dashed-line{stroke-dasharray:3;}#mermaid-svg-n4cz8nR4OqLJK9JC #compositionStart,#mermaid-svg-n4cz8nR4OqLJK9JC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #compositionEnd,#mermaid-svg-n4cz8nR4OqLJK9JC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #dependencyStart,#mermaid-svg-n4cz8nR4OqLJK9JC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #dependencyStart,#mermaid-svg-n4cz8nR4OqLJK9JC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #extensionStart,#mermaid-svg-n4cz8nR4OqLJK9JC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #extensionEnd,#mermaid-svg-n4cz8nR4OqLJK9JC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #aggregationStart,#mermaid-svg-n4cz8nR4OqLJK9JC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC #aggregationEnd,#mermaid-svg-n4cz8nR4OqLJK9JC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-n4cz8nR4OqLJK9JC .edgeTerminals{font-size:11px;}#mermaid-svg-n4cz8nR4OqLJK9JC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ISubject void RegisterObserver(IObserver observer) void RemoveObserver(IObserver observer) void NotifyObservers() IObserver void Update(string weatherInfo) WeatherStation -List observers -string weatherInfo void SetWeatherInfo(string info) void RegisterObserver(IObserver observer) void RemoveObserver(IObserver observer) void NotifyObservers() MobileApp void Update(string weatherInfo) Website void Update(string weatherInfo) Program static void Main(string[] args) 解释 被观察者接口 (ISubject)定义了注册、移除和通知观察者的方法。观察者接口 (IObserver)定义了更新方法当被观察者状态改变时观察者会收到通知。具体被观察者 (WeatherStation)实现了 ISubject 接口管理观察者的注册、移除和通知。具体观察者 (MobileApp 和 Website)实现了 IObserver 接口接收被观察者的通知并进行相应的处理。客户端代码 (Program)创建了 WeatherStation 实例并注册了 MobileApp 和 Website 作为观察者。通过调用 SetWeatherInfo 方法改变天气信息触发观察者的更新方法。之后移除 MobileApp 观察者并再次改变天气信息验证观察者机制。 用途 解耦主题和观察者观察者模式使得主题和观察者之间的依赖关系变得松散主题不需要知道观察者的具体实现。动态注册和注销观察者可以动态地注册和注销使得系统更加灵活。事件驱动适用于事件驱动的系统当某个事件发生时可以通知多个观察者进行相应的处理。 优点 解耦主题和观察者之间的依赖关系被解耦使得代码更加灵活和可维护。扩展性增加新的观察者时不需要修改主题的代码符合开闭原则。动态性观察者可以动态地注册和注销使得系统更加灵活。 缺点 性能问题如果观察者数量较多通知所有观察者可能会导致性能问题。内存泄漏如果观察者没有正确注销可能会导致内存泄漏。调试困难由于观察者模式涉及多个对象之间的交互调试时可能会比较困难。 适用场景 事件驱动系统当需要在某个事件发生时通知多个对象时。解耦对象当需要解耦主题和观察者之间的依赖关系时。动态注册和注销当观察者需要动态地注册和注销时。 实际开发中的应用 1. 消息通知系统 假设我们正在开发一个消息通知系统当用户发布新消息时需要通知多个订阅者如邮件、短信、推送通知等。 using System; using System.Collections.Generic;// 被观察者接口 public interface IMessagePublisher {void RegisterSubscriber(IMessageSubscriber subscriber);void UnregisterSubscriber(IMessageSubscriber subscriber);void NotifySubscribers(string message); }// 观察者接口 public interface IMessageSubscriber {void OnMessageReceived(string message); }// 具体被观察者 public class MessagePublisher : IMessagePublisher {private ListIMessageSubscriber subscribers new ListIMessageSubscriber();public void PublishMessage(string message){NotifySubscribers(message);}public void RegisterSubscriber(IMessageSubscriber subscriber){subscribers.Add(subscriber);}public void UnregisterSubscriber(IMessageSubscriber subscriber){subscribers.Remove(subscriber);}public void NotifySubscribers(string message){foreach (var subscriber in subscribers){subscriber.OnMessageReceived(message);}} }// 具体观察者 public class EmailSubscriber : IMessageSubscriber {public void OnMessageReceived(string message){Console.WriteLine($Email received: {message});} }public class SMS Subscriber : IMessageSubscriber {public void OnMessageReceived(string message){Console.WriteLine($SMS received: {message});} }public class PushNotificationSubscriber : IMessageSubscriber {public void OnMessageReceived(string message){Console.WriteLine($Push notification received: {message});} }// 客户端代码 class Program {static void Main(string[] args){MessagePublisher publisher new MessagePublisher();IMessageSubscriber emailSubscriber new EmailSubscriber();IMessageSubscriber smsSubscriber new SMS Subscriber();IMessageSubscriber pushNotificationSubscriber new PushNotificationSubscriber();publisher.RegisterSubscriber(emailSubscriber);publisher.RegisterSubscriber(smsSubscriber);publisher.RegisterSubscriber(pushNotificationSubscriber);publisher.PublishMessage(New message: Hello, world!);publisher.UnregisterSubscriber(emailSubscriber);publisher.PublishMessage(Another message: Goodbye, world!);} }2. 股票市场监控 假设我们正在开发一个股票市场监控系统当股票价格发生变化时需要通知多个订阅者如投资者、分析师等。 csharp using System; using System.Collections.Generic;// 被观察者接口 public interface IStockMarket {void RegisterInvestor(IInvestor investor);void UnregisterInvestor(IInvestor investor);void NotifyInvestors(string stockInfo); }// 观察者接口 public interface IInvestor {void OnStockPriceChange(string stockInfo); }// 具体被观察者 public class StockMarket : IStockMarket {private ListIInvestor investors new ListIInvestor();public void UpdateStockPrice(string stockInfo){NotifyInvestors(stockInfo);}public void RegisterInvestor(IInvestor investor){investors.Add(investor);}public void UnregisterInvestor(IInvestor investor){investors.Remove(investor);}public void NotifyInvestors(string stockInfo){foreach (var investor in investors){investor.OnStockPriceChange(stockInfo);}} }// 具体观察者 public class IndividualInvestor : IInvestor {public void OnStockPriceChange(string stockInfo){Console.WriteLine($Individual Investor received: {stockInfo});} }public class InstitutionalInvestor : IInvestor {public void OnStockPriceChange(string stockInfo){Console.WriteLine($Institutional Investor received: {stockInfo});} }public class Analyst : IInvestor {public void OnStockPriceChange(string stockInfo){Console.WriteLine($Analyst received: {stockInfo});} }// 客户端代码 class Program {static void Main(string[] args){StockMarket market new StockMarket();IInvestor individualInvestor new IndividualInvestor();IInvestor institutionalInvestor new InstitutionalInvestor();IInvestor analyst new Analyst();market.RegisterInvestor(individualInvestor);market.RegisterInvestor(institutionalInvestor);market.RegisterInvestor(analyst);market.UpdateStockPrice(Apple stock price increased by 5%);market.UnregisterInvestor(individualInvestor);market.UpdateStockPrice(Google stock price decreased by 2%);} }总结 观察者模式通过定义对象之间的一对多依赖关系使得当一个对象的状态发生改变时所有依赖于它的对象都会得到通知并自动更新。虽然它可能会带来一些性能和调试上的问题但在需要解耦主题和观察者、支持动态注册和注销的场景中观察者模式能够显著提高代码的可维护性和扩展性。
http://www.dnsts.com.cn/news/162172.html

相关文章:

  • 网站建设地带网站设计自已申请
  • 公司网站做门户备案刚开始做写手上什么网站
  • 网站排名优化方案wordpress在线文档下载
  • 官网站内优化怎么做 2018网络平台有哪些类型
  • 枣庄市建设局网站迅速百度网站自然排名
  • dw中怎样做网站二级页面宁波市建设工程检测协会网站
  • 都兰县公司网站建设徐州市城乡和城乡建设厅网站首页
  • 做电影网站需要哪些条件各地平台网站
  • 网站建站禄劝彝族苗族网站建设
  • 山东省聊城建设学校网站360开户
  • 专业的网站设计师自己建网站难吗
  • .net做网站用mvc重庆软件开发公司
  • 网站建设合同制定制型网站制作哪家好
  • 网站登录慢制作书签 小学生一年级
  • 昆明网站制作宁波公司查询
  • 网站建设企业邮箱制作网站建立健全()和安全生产规章制度
  • 响应式网站制作工具免费建站宝盒
  • h5响应式网站模板制作做招聘网站价格
  • qq安全中心信任网站网络营销策划书的结构
  • 互助盘网站开发沈阳专业网站制作设计
  • 网站下载下来怎么做后台wordpress登录后台404
  • 包头网站作风建设年自评材料清洁公司
  • 一个网站做三个关键词莲花网站
  • 吴江做网站的公司腾讯cdn加速wordpress
  • 北京工程建设合同备案网站杭州租房网站建设
  • 网站制作的步骤不包括网站开发是哪个
  • 一起做网店网站哪里进货的贵州建设监理网站
  • 泉州网站设计理念培训文本编辑器做网站
  • 做影集的网站或软件wordpress motify
  • 企业微信网站建设方案模板下载网站主机选择