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

邯郸网站建设信息厦网站建设培训

邯郸网站建设信息,厦网站建设培训,注册网址,网架钢构公司目录 一. 前言 二. 实现 三. 优缺点 一. 前言 观察者模式属于行为型模式。在程序设计中,观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应&#xf…

目录

一. 前言

二. 实现

三. 优缺点


一. 前言

    观察者模式属于行为型模式。在程序设计中,观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应,所以也被称作“发布-订阅模式”。

二. 实现

主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。

案例:天气数据布告板会在天气信息发生改变时更新其内容,布告板有多个,并且在将来会继续增加。

public interface Subject {void resisterObserver(Observer o);void removeObserver(Observer o);void notifyObserver();
}
public class WeatherData implements Subject {private List<Observer> observers;private float temperature;private float humidity;private float pressure;public WeatherData() {observers = new ArrayList<>();}public void setMeasurements(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;notifyObserver();}@Overridepublic void resisterObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = observers.indexOf(o);if (i >= 0) {observers.remove(i);}}@Overridepublic void notifyObserver() {for (Observer o : observers) {o.update(temperature, humidity, pressure);}}
}
public interface Observer {void update(float temp, float humidity, float pressure);
}
public class StatisticsDisplay implements Observer {public StatisticsDisplay(Subject weatherData) {weatherData.resisterObserver(this);}@Overridepublic void update(float temp, float humidity, float pressure) {System.out.println("StatisticsDisplay.update: " + temp + " " + humidity + " " + pressure);}
}
public class CurrentConditionsDisplay implements Observer {public CurrentConditionsDisplay(Subject weatherData) {weatherData.resisterObserver(this);}@Overridepublic void update(float temp, float humidity, float pressure) {System.out.println("CurrentConditionsDisplay.update: " + temp + " " + humidity + " " + pressure);}
}
public class WeatherStation {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);weatherData.setMeasurements(0, 0, 0);weatherData.setMeasurements(1, 1, 1);}
}
CurrentConditionsDisplay.update: 0.0 0.0 0.0
StatisticsDisplay.update: 0.0 0.0 0.0
CurrentConditionsDisplay.update: 1.0 1.0 1.0
StatisticsDisplay.update: 1.0 1.0 1.0

三. 优缺点

优点
1. 被观察者和观察者对象之间不需要知道对方的具体实现,只需要知道对方的接口,避免了紧耦合的关系。
2. 由于被观察者对象并不关心具体的观察者是谁,所以在程序运行的过程中,可以动态地增加或者删除观察者对象,增加了灵活性。
3. 符合开闭原则,当需要添加新的观察者时,只需要添加一个实现观察者接口的类,而不需要修改被观察者对象的代码。
缺点
1. 当观察者没有被正确移除时,可能会导致内存泄漏的问题。
2. 实现观察者模式,需要定义多个接口和类,增加了程序的复杂度。
3. 在某些情况下,被观察者和观察者对象之间可能出现循环依赖的问题。

JDK中的命令模式
java.util.Observer
java.util.EventListener
javax.servlet.http.HttpSessionBindingListener

http://www.yayakq.cn/news/333316/

相关文章:

  • 做兼职的网站 知乎做一个app需要什么条件
  • 南京网站运营长沙人才招聘信息网
  • 阿卯网站建设房产集团公司网站建设方案
  • 网站首页网址网站建设售后服务承诺函
  • 有哪些做短租的网站好外国网站设计素材
  • 网站建设应急处置方案全网关键词指数查询
  • php网站外包旅游类网站模板免费下载
  • 网站建设找什么公司推广链接网站
  • 北京做网站优化多少钱温州网络公司前十名
  • 基于网站优化的搜索引擎推广方法站长工具站长之家官网
  • 17网站一起做网店河北成都百度网站制作
  • 手机网站推广网络营销营销型网站建设
  • 政务服务网站建设情况汇报手机网站建设维护
  • 专业做网站和小程序网站如何解析
  • 淘宝网站怎么做适配买域名建网站
  • 4大门户网站网站推广的目的是什么
  • 泰安网站制作推荐做创意美食的视频网站有哪些
  • 关于网站开发的商业计划书wordpress播放器mu38
  • 有名的wordpress网站discuz 转wordpress
  • 手机网站建设选 朗创营销网络推广方案xiala11
  • 网站内链怎么做更好如皋电子商城网站建设
  • 有一个网站怎么做cpc黄埔营销型网站建设
  • 优惠卷网站建设怎么挣钱电商网站建设功能
  • 五百丁简历模板官方网站网站建设后期服务收费标准
  • 谷歌网站诊断西宁做网站最好的公司
  • 免费弄空间的网站网站建设客户合同范本
  • 织梦网站程序安装做签证宾馆订单用啥网站
  • 做鲜花配送网站需要准备什么淄博网站建设app开发
  • 做村易通网站站长要收费吗?织梦同时运行多个网站
  • 上海网站建设的价格是多少钱网站制作需要哪些软件有哪些