环境监测系统

【说明】
某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。
现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图6-1所示。
在这里插入图片描述
java

import java.util.*;
interface Observer {
    pubilc void update(float temp, float humidity, float cleanness);
}
interface Subject {
    pubilc void registerObserver(Observer o)
    pubilc void removeObserver(Observer o)
    pubilc void notifyObservers()
}
class EnvironmentData implements Subject{
    private ArrayList observers;
    private float temperature,humidity,cleanness;
    pubilc EnvironmentData(){
        observers = new ArrayList()
    }
    pubilc void registerObserver(Observer o){
        observers.add(o)
    }
    pubilc void removeObserver(Observer o){}
    pubilc void notifyObservers(){
        for(int i=0;i<observers.size();i++){
           Observer observers = (Observer)observers.get(i);
           Observer.update(temperature,humidity,cleanness)
        }
    }
    pubilc void measurementsChanged(){
        notifyObservers();
    }
    pubilc void setMeasurements(float temperature,float humidity, float cleanness){
        this.temperature = temperature
        this.humidity = humidity
        this.cleanness = cleanness
        measurementsChanged();
    }
}
class CurrentConditionsDisplay implements Observer(){
    private float temperature;
    private float humidity;
    private float cleanness;
    private Subject envData;
    pubilc CurrentConditionsDisplay(Subject envData){
        this.envData = envData
        envData.registerObserver(this)
    }
    pubilc void update(float temperature,float humidity,float cleanness){
        this.temperature = temperature
        this.humidity = humidity
        this.cleanness = cleanness
        display();
    }
    pubilc void display(){}    
}
class EnvironmentMonitor{
    pubilc static void main(String[] args){
        EnvironmentData envData = new EnvironmentData()
        CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(envData)
        envData.setMeasurements(80,64,30.4f)
    }
}

C++

using namespace std
class Observer {
    pubilc virtual void update (float temp,float cleanness) = 0
}
class Subject {
    pubilc virtual void registerObserver(Observer*o) = 0
    virtual void removeObserver(Observer*o) = 0
    virtual void notifyObserver() = 0
}
class EnvironmentData:pubilc Subject{
    private: vector<Observer*> observer;
    float temperature,humidity,cleanness;
    pubilc: void registerObserver(Observer*o){
        observer.push_back(o)
    }
    void removeObserver(Observer*o){}
    void notifyObserver(){
        for(vector<Observer*>::const_iterator it = observer.begin();it!=observer.end();it++){
            (*it)->update(temperature,humidity,cleanness)
        }
    }
    void measurementsChanged(){
        notifyObserver();
    }
    void setMeasurements(float temperature,float humidity, float cleanness){
        this->temperature = temperature
        this->humidity = humidity
        this->cleanness = cleanness
        measurementsChanged();
    }
}
class CurrentConditionsDisplay:pubilc Observer(){
    private:float temperature,humidity,cleanness;
    Subject*envData;
    pubilc:CurrentConditionsDisplay(Subject*envData){
        this->envData = envData
        this->envData->registerObserver(this)
    }
    void update(float temperature,float humidity,float cleanness){
        this->temperature = temperature
        this->humidity = humidity
        this->cleanness = cleanness
        display();
    }
    void display(){}    
}
int main(){
    EnvironmentData*envData = new EnvironmentData()
    CurrentConditionsDisplay*currentDisplay = new CurrentConditionsDisplay(envData)
    envData->setMeasurements(80,64,30.4f)
    return 0
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值