观察者模式

package com.test;


import com.test.observer.CurrentConditionDisplay;
import com.test.observer.StatisticsDisplay;
import com.test.observerImpl.Observer;
import com.test.subject.CarData;
import com.test.subject.WeatherData;
import com.test.subjectImpl.Subject;


public class Test {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject weatherData = new WeatherData();
Subject carData = new CarData();


Observer currentConditionDisplay = new CurrentConditionDisplay(weatherData);
Observer statisticsDisplay = new StatisticsDisplay(weatherData);
carData.addObserver(currentConditionDisplay);
carData.addObserver(statisticsDisplay);

carData.setCarState("guilin", 110);
carData.setCarState("heilongjiang", 200);
weatherData.setMeasurements(1, 2, 3);
weatherData.setMeasurements(456, 4, 6);
weatherData.setMeasurements(7, 8, 9);
}

}


package com.test.data;


public class Data {
private float pressure;
private float temperature;
private float humidity;

private String place;
private int avgFlow;
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
public int getAvgFlow() {
return avgFlow;
}
public void setAvgFlow(int avgFlow) {
this.avgFlow = avgFlow;
}
public float getPressure() {
return pressure;
}
public void setPressure(float pressure) {
this.pressure = pressure;
}
public float getTemperature() {
return temperature;
}
public void setTemperature(float temperature) {
this.temperature = temperature;
}
public float getHumidity() {
return humidity;
}
public void setHumidity(float humidity) {
this.humidity = humidity;
}
}


package com.test.displayment;
import com.test.subjectImpl.Subject;
public interface Displayment {
public void display(Subject obj);
}


package com.test.observer;


import com.test.data.Data;
import com.test.displayment.Displayment;
import com.test.observerImpl.Observer;
import com.test.subject.CarData;
import com.test.subject.WeatherData;
import com.test.subjectImpl.Subject;


public class CurrentConditionDisplay implements Observer, Displayment {
private Subject weatherData;
private Data data;


public CurrentConditionDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.addObserver(this);
}


@Override
public void update(Subject obj, Data data) {
// TODO Auto-generated method stub
if (obj instanceof WeatherData) {
WeatherData weatherData = (WeatherData) obj;
this.data = weatherData.getData();
}
if (obj instanceof CarData) {
CarData carData = (CarData) obj;
this.data = carData.getData();
}
display(obj);
}


@Override
public void display(Subject obj) {
// TODO Auto-generated method stub
if (obj instanceof WeatherData)
System.out.println("humidity = " + data.getHumidity()
+ "pressure = " + data.getPressure());
if (obj instanceof CarData)
System.out.println("place = " + data.getPlace());
}
}


package com.test.observer;


import com.test.data.Data;
import com.test.displayment.Displayment;
import com.test.observerImpl.Observer;
import com.test.subject.CarData;
import com.test.subject.WeatherData;
import com.test.subjectImpl.Subject;


public class StatisticsDisplay implements Displayment, Observer {
private Subject weatherData;
private Data data;


public StatisticsDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.addObserver(this);
}


@Override
public void display(Subject obj) {
// TODO Auto-generated method stub
if (obj instanceof WeatherData)
System.out.println("temperature = " + data.getTemperature()
+ "pressure = " + data.getPressure());
if (obj instanceof CarData)
System.out.println("avgFlow = " + data.getAvgFlow());
}


@Override
public void update(Subject obj ,Data data) {
// TODO Auto-generated method stub
if(obj instanceof WeatherData)
{
WeatherData weatherData = (WeatherData)obj;
this.data = weatherData.getData();
}
if(obj instanceof CarData)
{
CarData carData = (CarData)obj;
this.data = carData.getData();
}
display(obj);
}
}


package com.test.observerImpl;


import com.test.data.Data;
import com.test.subjectImpl.Subject;


public interface Observer {
public void update(Subject obj,Data data);
}


package com.test.subject;


import java.util.Vector;


import com.test.data.Data;
import com.test.observerImpl.Observer;
import com.test.subjectImpl.Subject;


public class CarData implements Subject {
private Vector<Observer> observers;
private Data data;


public CarData() {
observers = new Vector();
data = new Data();


}


@Override
public void addObserver(Observer o) {
// TODO Auto-generated method stub
observers.add(o);
}


@Override
public void notifyObservers() {
// TODO Auto-generated method stub
for (Observer o : observers) {
o.update(this, data);
}
}


@Override
public void notifyObservers(Data data) {
// TODO Auto-generated method stub
for (Observer o : observers) {
o.update(this, data);
}


}


@Override
public void removeObserver(Observer o) {
// TODO Auto-generated method stub
int i = observers.indexOf(o);
if (i > 0)
observers.remove(i);
}


@Override
public void setMeasurements(float temperature, float pressure,
float humidity) {
// TODO Auto-generated method stub


}


public void setCarState(String place, int avgFlow) {
data.setPlace(place);
data.setAvgFlow(avgFlow);
measureChanged();
}


public void measureChanged() {
notifyObservers();
}


public Data getData() {
return this.data;
}
}


package com.test.subject;


import java.util.ArrayList;


import com.test.data.Data;
import com.test.observerImpl.Observer;
import com.test.subjectImpl.Subject;


public class WeatherData implements Subject {
private ArrayList observers;




private Data data;
private Data preData;


public WeatherData() {
observers = new ArrayList();


data = new Data();
preData = new Data();
}


@Override
public void addObserver(Observer o) {
// TODO Auto-generated method stub
observers.add(o);
}


@Override
public void notifyObservers() {
// TODO Auto-generated method stub
for (int i = 0; i < observers.size(); i++) {
Observer o = (Observer) observers.get(i);
o.update(this, data);
}
}


@Override
public void notifyObservers(Data data) {
// TODO Auto-generated method stub
if (setChanged()) {
for (int i = 0; i < observers.size(); i++) {
Observer o = (Observer) observers.get(i);
o.update(this, data);
}
}
}

public boolean setChanged()
{
if(Math.abs( (data.getHumidity()-preData.getHumidity()) )<=2.0 )
return false;
else 
return true;
}


@Override
public void removeObserver(Observer o) {
// TODO Auto-generated method stub
int i = observers.indexOf(o);
if (i > 0)
observers.remove(i);
}


@Override
public void setMeasurements(float temperature, float pressure,
float humidity) {
// TODO Auto-generated method stub
preData.setHumidity(data.getHumidity());
preData.setPressure(data.getPressure());
preData.setTemperature(data.getTemperature());


data.setHumidity(humidity);
data.setPressure(pressure);
data.setTemperature(temperature);
measurementsChanged();
}


public void measurementsChanged() {
notifyObservers(data);
}


public Data getData() {
return this.data;
}


public void setCarState(String place, int avgFlow) {


}
}


package com.test.subjectImpl;


import com.test.data.Data;
import com.test.observerImpl.Observer;


public interface Subject {
public void addObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
public void setMeasurements(float temperature , float pressure , float humidity);
public void notifyObservers(Data data);
public void setCarState(String place,int avgFlow);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值