未分类题

某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。
现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图5-1所示。
中级软件设计师,历年真题,2014年上半年(下午)《软件设计师》真题
【C++代码】
#include<iostream>
#include<vector>
using namespace std;
class Observer{
public:
virtual void update(float temp,float humidity,float cleanness)=0;
};
class Subject{
public:
virtual void registerObserver(Observer*o)=0;//注册对主题感兴趣的观察者
virtual void removeObserver(Observer*o)=0;//删除观察者
virtual void notifyObservers(  )=0;//当主题发生变化时通知观察者
};
class EnvironmentData:public(1){
private:
vector<Observer*>observers;
float temperature,humidity,cleanness;
public:
void registerObserver(Observer*o){observers.push_back(o);}
void removeObserver(Observer*o){/*代码省略*/}
void notifyObservers(  ){
for(vector<Observer*>::const_iterator it=observers.begin(  );it!=observers.end(  );it++)
{(2);}
}
Void measurementsChanged(  ){(3);}
void setMeasurements(float temperature,float humidity,float cleanness){
this->temperature=temperature;
this->humidity=humidity;
this->cleanness=cleanness;
(4);
}
};
class CurrentConditionsDisplay:public(5){
private:
float temperature,humidity,cleanness;
Subject*envData;
public:
CurrentConditionsDisplay(Subject*envData){
this->envData=envData;
(6);
}
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,65,30.4f);
return 0;
}

【参考答案】

(1)Subject
(2)(*it)->update(temperature,humidity,cleanne......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

未分类题
某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilver)或金卡会员(CGold)。非会员(CNonMember)不能积累里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25000英里但不足50000英里,则自动升级为银卡会员;若累积的里程数在50000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员;若累积的里程数达到25000英里,但是不足50000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员。采用面向对象方法对会员积分系统进行分析与设计,得到如图3-1所示的状态图和图3-2所示的类图。图3-1状态图图3-2的类图【问题1】(6分)根据说明中的描述,给出图3-1中S1~S3处所对应的状态以及T1~T3处所对应的迁移的名称。【问题2】(4分)根据说明中的描述,给出图3-2中C1~C4所对应的类名(类名使用说明中给出的英文词汇)。【问题3】(5分)图3-2所示的类图中使用了哪种设计模式?在这种设计模式下,类CFrequentFlyer必须具有的属性是什么?C1~C4中的travel方法应具有什么功能?