您现在的位置是:主页 > news > 关键词优化除了做网站还有什么方法/成都网站快速排名软件

关键词优化除了做网站还有什么方法/成都网站快速排名软件

admin2025/6/24 8:47:34news

简介关键词优化除了做网站还有什么方法,成都网站快速排名软件,做视频卖给视频网站,河北省网站备案管理系统观察者模式 以报纸的订阅为例: 报社负责出版报纸。向报社订购报纸后,当有新的报纸出版,报社就会给订购者送来。当订购者不想再收到报纸时,取消订购即可。 报社 订购者 观察者模式。 观察者模式定义了对象之间的一对多依赖&…

关键词优化除了做网站还有什么方法,成都网站快速排名软件,做视频卖给视频网站,河北省网站备案管理系统观察者模式 以报纸的订阅为例: 报社负责出版报纸。向报社订购报纸后,当有新的报纸出版,报社就会给订购者送来。当订购者不想再收到报纸时,取消订购即可。 报社 订购者 观察者模式。 观察者模式定义了对象之间的一对多依赖&…

观察者模式

以报纸的订阅为例:

  • 报社负责出版报纸。
  • 向报社订购报纸后,当有新的报纸出版,报社就会给订购者送来。
  • 当订购者不想再收到报纸时,取消订购即可。

报社 + 订购者 = 观察者模式。

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

主    题(报社) :发送通知给所有实现了观察者接口的对象。

观察者(订购者):实现观察者接口,并注册为观察者即可。

松耦合

松耦合是观察者模式的一个重要特点。改变主题或观察者,并不会影响另一方。

如果两个对象是松耦合的,它们可以交互,但不太清楚彼此的细节。只要两者遵守它们之间的接口,我们就可以自由的改变它们。

场景介绍

假设现在要建设一个气象观测站,主要分为三个部分:

  1. 气象站 —— 获取实际气象数据的物理装置
  2. 三个布告板 —— 显示当前的天气状况:目前状况、气象统计、天气预报
  3. WeatherData对象 —— 追踪气象站的数据,并更新布告板

UML设计图

代码示例

接口

主题 —— Subject

public interface Subject {public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();
}

观察者 —— Observer

public interface Observer {public void update(int value);
}

展示者 —— DisplayElement 

public interface DisplayElement {public void display();
}

主题

public class WeatherData implements Subject {// 以List记录观察者private List<Observer> observers;private float temperature;private float humidity;private float pressure;public WeatherData() {observers = new ArrayList<Observer>();}// 注册观察者时,添加到list后即可	public void registerObserver(Observer o) {observers.add(o);}// 当某个观察者取消订阅后,将其从list中删除即可public void removeObserver(Observer o) {observers.remove(o);}// 当数据变化时,遍历list,调用所有观察者的update接口进行数据更新public void notifyObservers() {for (Observer observer : observers) {observer.update(temperature, humidity, pressure);}}public void measurementsChanged() {notifyObservers();}public void setMeasurements(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;// 每当天气指数变化时,都调用此方法measurementsChanged();}public float getTemperature() {return temperature;}public float getHumidity() {return humidity;}public float getPressure() {return pressure;}}

观察者

public class StatisticsDisplay implements Observer, DisplayElement {private float maxTemp = 0.0f;private float minTemp = 200;private float tempSum= 0.0f;private int numReadings;private WeatherData weatherData;public StatisticsDisplay(WeatherData weatherData) {this.weatherData = weatherData;weatherData.registerObserver(this);}public void update(float temp, float humidity, float pressure) {tempSum += temp;numReadings++;if (temp > maxTemp) {maxTemp = temp;}if (temp < minTemp) {minTemp = temp;}display();}public void display() {System.out.println("Avg/Max/Min temperature = " + (tempSum / numReadings)+ "/" + maxTemp + "/" + minTemp);}
}

测试程序

public class WeatherStationHeatIndex {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);weatherData.setMeasurements(80, 65, 30.4f);weatherData.setMeasurements(82, 70, 29.2f);weatherData.setMeasurements(78, 90, 29.2f);}
}

Java内置的观察者模式

Java中内置的观察者模式与上述例子类似,主要来源于两个包:

import java.util.Observable;
import java.util.Observer;

 特点

 Java内置的观察者模式与上述例子最大的不同是在主题中,增加了setChanged()方法:

protected synchronized void setChanged() {changed = true;
}

setChanged()方法用来标记状态已经改变的事实,让主题知道此时应该通知观察者。

如果没有setChanged()方法,气象站的测量非常敏锐一旦温度变化就会立即更新,就会造成主题持续不断的通知观察者。但事实上我们可能希望温度变化超过半度才更新。setChanged()方法就是为此而生。

缺点

Observable是一个类!!!这导致Observable的复用潜力被限制了(因为Java不支持多重继承)。

应用举例

  • JDK 提供的观察者接口:Observable 类以及 Observer 接口。

  • Spring中的ApplicationListener
  • Guava 中的 EventBus