首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。
admin
2021-03-24
46
问题
阅读下列说明和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
软件设计师下午应用技术考试
软考中级
相关试题推荐
结构化布线成为网络设计和管理的首先考虑的问题,当实施结构化布线时,需要进行详细的规划设计。
阅读以下说明,回答问题1~4,将解答填入对应栏内。A公司用一台Web服务器和一台应用服务器来管理销售信息。销售人员在办公室时通过PC机来访问应用服务器,若在公司以外,则通过移动电话或PDA(PersonalDigitalAssistant)访问公司网
若设置域名解析服务器,已知该文件服务器上文件named.boot的内容如下:Directory/var/namedCachenamed.rootPrimary0.0.127in-addr.arpanamed.loc
阅读以下说明,回答问题1~7,将解答填入对应的解答栏内。图3-1是在网络中划分VLAN的连接示意图。VLAN可以不考虑用户的物理位置,而根据功能、应用等因素将用户从逻辑上划分为一个个功能相对独立的工作组,每个用户主机都连接在支持VLAN的交换机端口
在WindowsServer2003的活动目录中,用户分为全局组(GlobalGroups)、域本地组(DomainLocalGroups)和通用组(UniversalGroups)。全局组的访问权限是(6),域本地组的访问权限是(
阅读以下说明,根据要求回答问题。[说明]在WindowsServer2003中可以采用筛选器来保护DNS通信。某网络拓扑结构如图1-15所示,WWW服务器的域名是WWW.abc.edu,DNS服务器上安装WindowsServer2
阅读以下说明,回答问题1至问题3,将解答填入对应的解答栏内。[说明]某单位网络的拓扑结构示意图如图5-1所示。该网络采用RIP协议,要求在R2上使用访问控制列表禁止网络192.168.20.0/24上的主机访问网络192.168.10.0/
阅读以下说明。回答问题,将解答填入答题纸对应的解答栏内。【说明】某公司网络划分为两个子网,其中设备A是DHCP服务器,如图3-1所示。如果客户机无法找到DHCP服务器,它将从________________网段中挑选一个作为自己的IP地址,子网掩
在内部排序中,通常要对被排序数据序列进行多趟扫描。各种排序方法有其不同的排序实施过程和(时间)复杂性。对给定的整数序列(541,132,984,746,518,181,946,314,205,827)进行从小到大的排序时,采用冒泡排序的第一趟扫描结果是(6
SDLC was invented by IBM to replace the older Bisynchronous protocol for wide area connections between IBM equipment. A varietio
随机试题
奥伦护理系统结构示意图确定的在支持教育系统中护士主要的活动是
A.人虱 B.恙螨 C.鼠蚤 D.蜱 E.白蛉恙虫病立克次体的传播媒介是
结核引起的坏死脚的坏死,表面呈黑色,与周围正常组织边界清楚
经医师资格考试或助理医师考试.取得医师或助理医师资格,颁发执业或助理资格证书的机构是
A.降香B.鹿角霜C.海金沙D.西红花E.紫河车宜包煎的饮片是()。
[2006年第64题]室外消火栓的设置,下列哪一个示意图是正确的?
北京的甲公司和长沙的乙公司于2010年4月1日在上海签订一买卖合同。合同约定,甲公司向乙公司提供一批货物,双方应于2010年4月10日在厦门履行合同。2010年4月10日,甲公司依约交货后,乙公司拒绝付款。经交涉无效,甲公司准备对乙公司提起诉讼。
读书属于个人的精神生活,必定是非常个人化的。可以成为时尚的不是读书,而是买书和谈书。譬如说,在媒体的__________下,某一时期有某一本书特别畅销,谈论它显得很__________,插不上嘴便显得很__________。填入划横线部分最恰当的一项是:
某模拟网站的主页地址是http://localhost:65531/ExamWeb/index.htm,打开此主页,浏览“科技小知识”页面,查找“纳米是什么?”的页面内容,并将它以文本文件的格式保存到考生目录下,命名为“nami.txt”。
Lastyearatairportsacrosstheworld,18%offlightsweredelayed,leavingmillionsofpassengersstuckwithalotoftimeon
最新回复
(
0
)