首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。
admin
2021-03-24
66
问题
阅读下列说明和C++代码,将应填入
(n)
处的字句写在答题纸的对应栏内。
【说明】
某文件管理系统中定义了类OfficeDoc和DocExplorer。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图5-1所示。
【C++代码】
#include<iostream>
#inelude<vector>
#include<string>
using namespace std;
class Obseryer{
public:
(1)
;
};
class Subject{
protected:
vector<
(2)
>myObs;
public:
virtual void Attach(Observer
*
obs)(myObs.push_back(obs);}
virtual void Detach(Observer
*
obs){
for (vector<Observer
*
>::iterator iter = myObs.begin(); iter !=
myObs.end(); iter++){
if(
*
iter==obs){myObs.erase(iter);return;}
}
}
virtual void Notify(){
for(vector<Observer
*
>::iterator iter=myObs.begin();iter!=myObs.end();
iter++){
(3)
;}
}
virtualintgetStatus()=0;
virtual void setStatus(int status)=0;
};
classOfficeDoc:publiC Subj ect{
private:
stringmySubjectName;
intm_status;
public:
OfficeDoc(string name):mySubjectName(name),m_status(0){}
voidsetStatus(int status){m_Status=status;}
intqetStatus(){return m_status;}
};
classDocExplorer:public Observer{
private:
stringmyobsName;
public:
DocExplorer(string name,
(4)
sub):myObsName(name){ sub->
(5)
;}
void update(){ cout<< "update observer:" <<myObsName<<endl;}
};
Int main(){
Subject
*
subjectA=new OfficeDoc("subject A");
Observer
*
observerA=new DocExplorer("obserVerA", subjectA);
subjectA->setstatus(1); subjectA->Notify();
return 0;
}
选项
答案
(1)virtualvoidupdate()=0 (2)Observer
*
(3)(
*
iter)->update() (4)Subject
*
(5)Attach(this)
解析
本题考查设计模式中的观察者(Observer)模式的基本概念和应用。
观察者模式的意图是,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的结构图如图5-2所示。
其中:
●Subject(目标)知道它的观察者,可以有任意多个观察者观察同一个目标;提供注册和删除观察者对象的接口。
●Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。
●ConcreteSubject(具体目标)将有关状态存入各ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知。
●ConcreteObserver(具体观察者)维护一个指向ConcreteSubject对象的引用;存储有关状态,这些状态应与目标的状态保持一致;实现Observer的更新接口,以使自身状态与目标的状态保持一致。
观察者模式适用于:
●当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用。
●当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。
●当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。
本题中的类Subject对应于图5-2中的Subject,类OfficeDoc对应ConcreteSubject;类Observer对应图5-2中的Observer,类DocExplore对应ConcreteObserver。DocExplore维护一个指向OfficeDoc对象的引用,当OfficeDoc的状态发生改变时,向DocExplore发出通知。
第(1)空需要填写Observer中的核心方法,即在目标发生改变时通知观察者的更新接口。这个方法的原型可以在Obsever的子类DocExplore中找到:void update()。update方法需要在子类中进行重置,这里采用了C++中的动态多态机制一一纯虚拟函数。所以第(1)空应填入virtual void update()=0。
一个Subject可以有多个观察者,在Subject中需要提供增加和删除观察者的接口,即类中的Attach、Detach方法。这两个方法的主要操作对象就是类中的属性myObs。根据程序上下文推断,myObs表示的应该是观察者的集合,所以第(2)空应填入Observer
*
。
第(3)空出现在Subject的方法Notify中,这个方法的功能是当目标发生变化时,通知所有与该目标关联的观察者,即调用每个观察者定义的update方法,所以第(3)空应填入(
*
iter)->update()。
DocExplore是一个具体的观察者,它需要维护一个指向目标的对象,在这里实际上就是指向OfficeDoc的对象。观察者与目标的关联关系是通过DocExplore的构造函数实现的。在面向对象的继承机制中,通常倾向于用基类指针代替派生类指针,因此第(4)空应填入Subject
*
。
观察者与目标的关联关系的建立需要调用Subject中的方法Attach,因此第(5)空应填入Attach(this)。
转载请注明原文地址:https://kaotiyun.com/show/moxZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
结构化布线成为网络设计和管理的首先考虑的问题,当实施结构化布线时,需要进行详细的规划设计。
简述网络规划阶段需求分析的方法和解决的问题(控制在100个字以内)。在需求分析过程中应对已有网络的现状及运行情况作调研,如果要在已有的网络上作新的网络建设规划,如何保护用户已有投资(控制在100个字以内)?
如图4所示,GSW为千兆以太网交换机,内设ATM模块。SW1为100M/1000Mbit/s以太网交换机,SW2为ATM/100Mbit/s以大网交换机,RT为中心路由器;S1和S2为服务器,分别经千兆以太网卡和155Mbit/sATM网卡与GSW(千兆以
阅读以下说明,回答问题1~3,将解答填入对应的解答栏内。某公司的分支机构通过一条DDN专线接入到公司总部,地址分配和拓扑结构如图5-1所示。在两台路由器之间可以使用静态路由,也可以使用动态路由。在[问题1]和[问题2]中,所使用的是静态路
某Linux服务器上通过xinetd来对各种网络服务进行管理,该服务器上提供ftp服务,ftp服务器程序文件为/usr/bin/ftpd,ftp服务器的配置文件/etc/xinetd.d/ftp内容如下所示,目前该服务器属于开启状态:servic
阅读以下说明,回答问题1至问题3,将解答填入对应的解答栏内。[说明]某单位网络的拓扑结构示意图如图5-1所示。该网络采用RIP协议,要求在R2上使用访问控制列表禁止网络192.168.20.0/24上的主机访问网络192.168.10.0/
阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。【说明】某公司网络拓扑结构图如图4-1所示。公司内部的用户使用私有地址段192.168.1.0/24。【问题3】在S1上将F0/1接口配置为mink模式时,出现了以下提示:Co
Packet-switching wireless networks are preferable(66)when transmissions are(67)because of the way charges are(68)per packet. Cir
SDLC was invented by IBM to replace the older Bisynchronous protocol for wide area connections between IBM equipment. A varietio
Routingprotocolsusedifferenttechniquesforassigning(1)toindividualnetwork.Further,eachroutingprotocolformsametricag
随机试题
关于中心性浆液性视网膜脉络膜病变的叙述,错误的是
男性,55岁,反复无规律上腹部胀痛3年,胃镜诊断为萎缩性胃炎。判断该患者炎症活动的客观依据是()
在应收账款系统中,坏账处理的主要功能包括()。
关于MACD的描述,下列说法中,正确的是()。
下列哪一项不是老年人可能对认知和情绪问题抱有的偏见?( )。
忠诚于人民教育事业,志存高远,勤恳敬业,甘为人梯,乐于奉献。对工作高度负责,认真备课上课,认真批改作业,认真辅导学生。不得敷衍塞责。这体现了新时期教师职业道德规范内容中的()。
强调心理学应该研究无意识现象的基本流派是()。
谈谈对甘肃庆阳校车事故的看法。你认为事件反映出了怎样的社会问题?
数据结构分为线性结构和非线性结构,带链的队列属于______。
下列关于派生类构造函数和析构函数的说法中,错误的是()。
最新回复
(
0
)