觀察者模式

 

現有以下的場景需求: 有一個 氣象觀察者,能一次性記錄下  溫度,氣壓,溼度 這三個數據  而且將這三個數據 發佈到三個 的顯示屏幕上面 ,每個屏幕關注的點不同 java

 

好比 溫度這個顯示屏 只關注 溫度和溼度  溼度顯示屏只關注 溼度和睦壓 等ide

 

 這個時候咱們能夠使用觀察者模式,氣象站的數據 就是這個  ,三個顯示屏上面的數據都是須要依賴它的,這就是 測試

實現代碼 以下 :this

先 定義 主題接口 和 觀察者接口 以及 表現接口spa

 

package com.observe.interfaceModel.www;接口

// 這裏定義的是觀察者模式的主題
public interface Subject {
 
 public  void  registerObserve(Observe observe);
 
 public void removeObserve(Observe observe);
 
 public void noticeObserve();
}
rem

 

package com.observe.interfaceModel.www;get

public interface Observe {it

 public  void update(float temperature,float humidity,float perssure);
}
class

 

package com.observe.interfaceModel.www;

public interface DisplayInterfacce {

 public void  display();
}

//實現 主題接口

package com.observe.model.www;

import java.util.ArrayList;
import java.util.List;

import com.observe.interfaceModel.www.Observe;
import com.observe.interfaceModel.www.Subject;

public class WeatherDate implements Subject{
 
 private  float temperature;
 private  float humidity;
 private float pressure;
 private List<Observe> listObserve;
 
 public  WeatherDate(){
  listObserve = new ArrayList<Observe>();
 }
 @Override
 public void registerObserve(Observe observe) {
  listObserve.add(observe);
 }

 @Override
 public void removeObserve(Observe  observe) {
  int index = listObserve.indexOf(observe);
  listObserve.remove(index);
  
 }

 @Override
 public void noticeObserve() {
   for(Observe observe : listObserve){
     observe.update(this.temperature,this.humidity,this.pressure);
   }
  
 }
 
 public void setChange(float temperature, float humidity, float perssure){
  this.humidity = humidity;
  this.temperature = temperature;
  this.pressure = perssure;
  noticeObserve();
 }

}

 

//實現觀察者接口 和 表現接口

 

package www.obeseves.com;

import com.observe.interfaceModel.www.DisplayInterfacce;
import com.observe.interfaceModel.www.Observe;
import com.observe.interfaceModel.www.Subject;

public class TemperatureObserve  implements Observe,DisplayInterfacce{
 
 private Subject subject; //這裏仍是要保留對 主題的引用
 private float temperature;
   private float humidity;

 
 public TemperatureObserve(Subject subject){
  this.subject = subject;
  this.subject.registerObserve(this);
 }

 @Override
 public void display() {
  System.out.println("temperature : " +  this.temperature + " humidity :"  + this.humidity);
  
 }

 @Override
 public void update(float temperature, float humidity, float perssure) {
  this.temperature = temperature;
  this.humidity = humidity;
  display();
 }

 

}

 

package www.obeseves.com;

import com.observe.interfaceModel.www.DisplayInterfacce;
import com.observe.interfaceModel.www.Observe;
import com.observe.interfaceModel.www.Subject;

public class PerssureObserve implements Observe,DisplayInterfacce{
 
 private Subject subject;
 private float perssure;
   private float humidity;

 
 public PerssureObserve(Subject subject){
  this.subject = subject;
  this.subject.registerObserve(this);
 }

 @Override
 public void display() {
  System.out.println("temperature : " +  this.perssure + " humidity :"  + this.humidity);
  
 }

 @Override
 public void update(float temperature, float humidity, float perssure) {
  this.perssure = perssure;
  this.humidity = humidity;
  display();
 }

 

}

package www.obeseves.com;

import com.observe.interfaceModel.www.DisplayInterfacce;
import com.observe.interfaceModel.www.Observe;
import com.observe.interfaceModel.www.Subject;

public class HumidityObserve implements Observe,DisplayInterfacce{
 
 private Subject subject;
 private float temperature;
   private float perssure;

 
 public HumidityObserve(Subject subject){
  this.subject = subject;
  this.subject.registerObserve(this);
 }

 @Override
 public void display() {
  System.out.println("temperature : " +  this.temperature + " perssure :"  + this.perssure);
  
 }

 @Override
 public void update(float temperature, float humidity, float perssure) {
  this.temperature = temperature;
  this.perssure = perssure;
  display();
 }

 

}

 

// 測試類:

 

package www.obeseves.com;

import com.observe.model.www.WeatherDate;

public class TestObserve {
 public static void main(String[]  args){
  WeatherDate   weatherDate = new WeatherDate();
  TemperatureObserve  temperatureObserve = new TemperatureObserve(weatherDate);
  HumidityObserve  humidityObserve  = new HumidityObserve(weatherDate);
  PerssureObserve perssureObserve  = new PerssureObserve(weatherDate);
  weatherDate.setChange(10f, 80f, 40f);
  weatherDate.setChange(20f, 70f, 50f);
  weatherDate.setChange(30f, 60f, 30f);
 }

}

相關文章
相關標籤/搜索