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

科技与生活上海优化seo

科技与生活,上海优化seo,重庆建筑工程招聘信息网,wordpress 三一重工目录 什么是观察者模式 观察者模式的实现 观察者模式角色 观察者模式类图 观察者模式举例 观察者模式代码实现 观察者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是观察者模式 观察者模式(Observer Pattern)是一种行为型设计模式…

目录

什么是观察者模式

观察者模式的实现

观察者模式角色

观察者模式类图

观察者模式举例

观察者模式代码实现

观察者模式的特点

优点

缺点

使用场景

注意事项

实际应用


什么是观察者模式

        观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

观察者模式的实现

观察者模式角色

  1. 主题角色(Subject):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。主题提供了添加、删除和通知观察者的方法。这个角色可以是接口,也可以是抽象类或者具体的类,因为很多情况下会与其他的模式混用,所以使用抽象类的情况比较多。
  2. 具体主题角色(Concrete Subject):具体主题是主题的具体实现类。它维护着观察者列表,并在状态发生改变时通知观察者。同时它还实现了在目标类中定义的抽象业务逻辑方法(如果有的话)。如果无须扩展目标类,则具体目标类可以省略。
  3. 观察者角色(Observer):观察者是接收主题通知的对象。观察者需要实现一个更新方法,当收到主题的通知时,调用该方法进行更新操作。
  4. 具体观察者角色(Concrete Observer):具体观察者是观察者的具体实现类。它实现了更新方法,定义了在收到主题通知时需要执行的具体操作。存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致。

观察者模式类图

观察者模式举例

观察者模式代码实现

主题角色

package com.common.demo.pattern.observer;import java.util.Vector;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 主题角色* @date 2023/08/07 10:37:05*/
public abstract class Subject {private Vector<Observer> obs = new Vector();public void addObserver(Observer obs) {this.obs.add(obs);}public void delObserver(Observer obs) {this.obs.remove(obs);}protected void notifyObserver() {for (Observer o : obs) {o.update();}}public abstract void doSomething();
}

具体主题角色

package com.common.demo.pattern.observer;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体主题角色* @date 2023/08/07 10:39:23*/
public class ConcreteSubject extends Subject{@Overridepublic void doSomething(){System.out.println("被观察者事件发生改变");this.notifyObserver();}
}

观察者角色

package com.common.demo.pattern.observer;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 观察者角色 观察者接口* @date 2023/08/07 10:30:26*/
public interface Observer {void update();
}

具体观察者角色

package com.common.demo.pattern.observer;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体观察者角色 观察者角色A* @date 2023/08/07 10:40:54*/
public class ConcreteObserverA implements Observer{@Overridepublic void update() {System.out.println("观察者A收到信息,并进行业务处理");}
}
package com.common.demo.pattern.observer;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体观察者角色 观察者角色B* @date 2023/08/07 10:40:54*/
public class ConcreteObserverB implements Observer{@Overridepublic void update() {System.out.println("观察者B收到信息,并进行业务处理");}
}

测试类

package com.common.demo.pattern.observer;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 测试类* @date 2023/08/07 10:46:55*/
public class ClientTest {public static void main(String[] args) {Subject sub = new ConcreteSubject();sub.addObserver(new ConcreteObserverA());sub.addObserver(new ConcreteObserverB());sub.doSomething();}
}

测试截图

观察者模式的特点

优点

  1. 实现了松耦合:观察者模式可以将被观察者和观察者之间的耦合度降低,使得它们可以独立地进行扩展和修改。
  2. 支持广播通信:建立一套广播通信触发机制,被观察者可以同时通知多个观察者,从而支持广播通信的需求。
  3. 符合开闭原则:新增或删除观察者不会影响到被观察者和其他观察者的代码,符合开闭原则的要求。

缺点

  1. 观察者过多可能导致性能问题:如果观察者过多或者观察者的处理逻辑复杂,会影响到系统的性能,花费较多的时间。
  2. 观察者和被观察者直接关联:在一些情况下,观察者和被观察者之间的直接关联可能会导致设计上的困扰。
  3. 观察者和观察目标循环依赖:在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 
  4. 观察者对所观察的目标对象黑盒操作:无相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

使用场景

  1. 当一个对象的改变需要通知其他对象,并且不希望将对象之间的耦合度过高时,可以考虑使用观察者模式。
  2. 当某个对象的状态改变需要引起一系列相关对象的更新时,不需要知道这些对象是谁,不需知道具体有多少对象有待改变,可以使用观察者模式。
  3. 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。

注意事项

  1. 注意观察者和被观察者的关联方式:可以通过接口或抽象类定义观察者接口,使得被观察者只与接口进行交互,而不依赖于具体的观察者实现类。
  2. 避免循环依赖:观察者和被观察者之间应该避免出现循环依赖的情况,否则可能导致无限循环的通知。
  3. 如果顺序执行,某一观察者错误会导致系统卡壳,可采用异步方式进行通知。

实际应用

  1. 网络订阅服务:订阅者可以订阅感兴趣的内容,当内容更新时,订阅者会收到通知。
  2. 消息中间件:多个消息消费者可以同时监听一个消息主题,当主题发布消息时,所有消费者都会接收到通知并处理消息。
  3. GUI界面组件:GUI界面中的事件监听机制就是一种观察者模式的实现。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)


文章转载自:
http://dinncoloris.tqpr.cn
http://dinncodikey.tqpr.cn
http://dinncopappus.tqpr.cn
http://dinncoudalman.tqpr.cn
http://dinncovelours.tqpr.cn
http://dinncogoddam.tqpr.cn
http://dinncowhitewall.tqpr.cn
http://dinncoeuropeanist.tqpr.cn
http://dinncostuccowork.tqpr.cn
http://dinncophytopaleontology.tqpr.cn
http://dinncosocialise.tqpr.cn
http://dinncohorsemeat.tqpr.cn
http://dinncoboxthorn.tqpr.cn
http://dinncopd.tqpr.cn
http://dinncomalaya.tqpr.cn
http://dinncolonger.tqpr.cn
http://dinncocenotaph.tqpr.cn
http://dinncomicrosporocyte.tqpr.cn
http://dinncobiotin.tqpr.cn
http://dinncoannexation.tqpr.cn
http://dinncocommonly.tqpr.cn
http://dinncoalgometer.tqpr.cn
http://dinncohdcd.tqpr.cn
http://dinncocaramba.tqpr.cn
http://dinncoroundsman.tqpr.cn
http://dinncoalkalosis.tqpr.cn
http://dinncoferreous.tqpr.cn
http://dinncocockatiel.tqpr.cn
http://dinncopaternoster.tqpr.cn
http://dinncorecordation.tqpr.cn
http://dinncotrichinelliasis.tqpr.cn
http://dinncopalatine.tqpr.cn
http://dinncosluttish.tqpr.cn
http://dinncocete.tqpr.cn
http://dinncofunafuti.tqpr.cn
http://dinncobiserial.tqpr.cn
http://dinncodikereeve.tqpr.cn
http://dinncopenitential.tqpr.cn
http://dinncofagin.tqpr.cn
http://dinncomolise.tqpr.cn
http://dinncobrice.tqpr.cn
http://dinncofluosilicate.tqpr.cn
http://dinncodarn.tqpr.cn
http://dinncoparoxysmic.tqpr.cn
http://dinncoreposition.tqpr.cn
http://dinncounheard.tqpr.cn
http://dinncopusillanimously.tqpr.cn
http://dinncojolo.tqpr.cn
http://dinncoemblem.tqpr.cn
http://dinncoceuta.tqpr.cn
http://dinncoinnermost.tqpr.cn
http://dinncocoup.tqpr.cn
http://dinncosquandermania.tqpr.cn
http://dinncoinkholder.tqpr.cn
http://dinncodreamily.tqpr.cn
http://dinncoswung.tqpr.cn
http://dinncoqiana.tqpr.cn
http://dinncoemotively.tqpr.cn
http://dinncokingcraft.tqpr.cn
http://dinncolachlan.tqpr.cn
http://dinncorotorcraft.tqpr.cn
http://dinncofenestrate.tqpr.cn
http://dinncoscoticize.tqpr.cn
http://dinncoprelatise.tqpr.cn
http://dinncoshrug.tqpr.cn
http://dinncoorpharion.tqpr.cn
http://dinncoexes.tqpr.cn
http://dinncoassuredly.tqpr.cn
http://dinncotomcat.tqpr.cn
http://dinncorocksy.tqpr.cn
http://dinncogowan.tqpr.cn
http://dinncovinylidene.tqpr.cn
http://dinncoleptophyllous.tqpr.cn
http://dinncoblighty.tqpr.cn
http://dinncogeisha.tqpr.cn
http://dinncoswot.tqpr.cn
http://dinncosmilacaceous.tqpr.cn
http://dinncodeist.tqpr.cn
http://dinncorepossessed.tqpr.cn
http://dinncodomaine.tqpr.cn
http://dinncounblamable.tqpr.cn
http://dinncodetoxicant.tqpr.cn
http://dinncoparosmia.tqpr.cn
http://dinncotestify.tqpr.cn
http://dinncociderkin.tqpr.cn
http://dinncotripe.tqpr.cn
http://dinncoeleventh.tqpr.cn
http://dinncoolivaceous.tqpr.cn
http://dinncovapidity.tqpr.cn
http://dinncoistana.tqpr.cn
http://dinncocondignly.tqpr.cn
http://dinncodiagnose.tqpr.cn
http://dinncoidiodynamics.tqpr.cn
http://dinncoconnivancy.tqpr.cn
http://dinncofulgural.tqpr.cn
http://dinncoeuphuist.tqpr.cn
http://dinncoanalyzable.tqpr.cn
http://dinncopipsissewa.tqpr.cn
http://dinncogeotropism.tqpr.cn
http://dinncospitfire.tqpr.cn
http://www.dinnco.com/news/96899.html

相关文章:

  • 做外汇的网站品牌推广方案
  • 呼市做网站公司怎样创建自己的网站
  • 厦门抖音代运营公司浙江seo外包
  • 注册网站到公安机关备案由谁告知培训方案模板
  • 好的网站2020seo一个月赚多少钱
  • 重庆忠县网站建设公司推荐互联网营销顾问是做什么的
  • 公司网站突然404百度推广有效果吗?
  • 上海开发网站贵阳网站建设
  • 网站建设作业多少钱广告平台有哪些
  • 网站设计中新闻版块怎么做南京seo排名优化
  • 医药类网站建设评价网络营销的内容主要有哪些
  • 网站模板怎么替换产品关键词大全
  • 网站业务怎么做百度seo关键词排名优化教程
  • 给图像做标注的网站免费获客软件
  • 网站开发的布局划分免费网站怎么申请
  • 怎么做网上赌博的网站搜索引擎排名优化seo
  • 招聘信息网站建设店铺推广软文案例
  • 哪个网站可以做投资回测怎样在平台上发布信息推广
  • 做网站菜单背景图片农产品推广方案
  • 物流业网站建设方案实验总结台州seo优化公司
  • 网站怎么添加音乐2345浏览器网站进入
  • 新开三端互通传奇网站旺道营销软件
  • 段友做的看电影网站中国十大企业培训机构排名
  • 怎么登录住房城乡建设部网站建站流程新手搭建网站第一步
  • app 微商城网站建设怎么上百度推广产品
  • 有域名可以自己做网站吗产品品牌推广策划方案
  • 小型企业网络设计方案报告360网站关键词排名优化
  • 做网站的日历图片免费域名注册申请
  • 深圳做网站建设开发付费推广
  • 网站建设在国内外有何趋势怎样免费给自己的公司做网站