📄 200502_rjsjs.htm
字号:
<p>void update(OfficeDoc *doc)=0; // 更新自身状态的函数 </p>
<p>// 其它相关属性和方法省略 </p>
<p>} </p>
<p>class OfficeDoc{ // 公文类 </p>
<p>private: </p>
<p>DocExploer *myObs[OBS_MAXNUM]; // 关注此公文类的 DocExplorer 类对象指针数组 </p>
<p>int index; // 与 OfficeDoc 对象关联的 DocExploer 对象的个数 </p>
<p>public: </p>
<p>OfficeDoc(){ <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>index=0; } </p>
<p>void attach(DocExploer *o){ </p>
<p>// 将一 DocExploer 对象与 OfficeDoc 对象相关联 </p>
<p>if (index >= OBS_MAXNUM || o == NULL) return; </p>
<p>for (int loop = 0; loop < index; loop++) </p>
<p>if (myObs[loop] == 0) return; </p>
<p>myObs[index] = o;index++; </p>
<p>} </p>
<p>void detach(DocExploer *o){ </p>
<p>// 解除某 DocExploer 对象与 OfficeDoc 对象的关联 </p>
<p>if(o==NULL) return; </p>
<p>for(int loop = 0; </p>
<p>loop < index; loop++){ </p>
<p>if(myObs[loop] == o){ </p>
<p>if (loop <= index-2) myObs[loop] = myObs[index-1]; </p>
<p>myObs[index-1] = NULL; </p>
<p>index--; </p>
<p>break; </p>
<p>} </p>
<p>} </p>
<p>} </p>
<p>private: </p>
<p>void notifyObs(){ </p>
<p>// 通知所有的 DocExplorer 对象更改自身状态 <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>for(int loop = 0; loop <index; loop++){ </p>
<p>myObs[loop]->____(4)____; //DocExplorer 对象更新自身状态 </p>
<p>} </p>
<p>} // 其它公文类的相关属性和方法 }; <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>DocExplorer::DocExplorer(OfficeDoc *doc){ </p>
<p>//DocExploer 类对象的构造函数 </p>
<p>doc->____(5)____; </p>
<p>// 将此 DocExplorer 对象与 doc 对象相关联 </p>
<p>} </p>
<p> </p>
<p>试题六(共 15 分) <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p> 阅读以下说明和 Java 代码,将应填入 _____(n)____ 处的字句写在答题纸的对应栏内。 [ 说明 ] 在一公文处理系统中,开发者定义了一个公文类 OfficeDoc, 其中定义了公文具有的属性和处理公文的相应方法。当公文件的内容或状态发生变化时,关注此 OfficeDoc 类对象的相应的 DocExplorer 对象都要更新其自身的状态。一个 OfficeDoc 对象能够关联一组 DocExplorer 对象。当 OfficeDoc 对象的内容或状态发生变化时,所有与之相关联的 DocExplorer 对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个 Java 源文件中,能够正确编译通过。 <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>[Java 代码 ] <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>//Subject.java 文件 </p>
<p>public interface Subject { </p>
<p>public void attach(Observer DocExplorer); </p>
<p>public void detach(Observer DocExplorer); </p>
<p>void notifyObservers(); } </p>
<p><span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span> </p>
<p>//Observer,java 文件 </p>
<p>public interface Obsever{ </p>
<p>void update(____(1)____); } </p>
<p> </p>
<p>//OfficeDoc.java 文件 </p>
<p>import java.util.*; </p>
<p>public class OfficeDoc implements Subject { //OfficeDoc 类实现 Subject 接口 </p>
<p>private Vector ObserverVector = new java.util.Vector(); </p>
<p>// 存储与 OfficeDoc 相关联的 DocExplorer 对象 </p>
<p>public void attach(Obsever observer){ // 将某 DocExplorer 对象与 OfficeDoc 相关联 ObserverVector.addElement(observer); } </p>
<p>public void detach(Observer observer){ // 解除某 DocExplorer 对象与 OfficeDoc 的关联关系 ObserverVector.removeElement(observer); } </p>
<p>public void notifyObservers(){ </p>
<p>// 当 OfficeDoc 对象状态已发生变化时,通知所有的 DocExplorer 对象 </p>
<p>Enumeration enumeration = ______(2)_____; </p>
<p>while (enumeration.hasMoreElements()){ </p>
<p>((Observer)enumeration.nextElement())._____(3)_____; </p>
<p>} </p>
<p>} </p>
<p>public Enumeration Observers(){ </p>
<p>return ObserverVector.elements(); } </p>
<p>// 其它公文类的属性和方法省略 </p>
<p>} </p>
<p><span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span> </p>
<p>//DocExplorer.java 文件 </p>
<p>public class DocExplorer implements _____(4)____{ </p>
<p>public void update(____(5)____){ </p>
<p>// 更新 DocExplorer 自身的状态,代码省略 </p>
<p>} </p>
<p>} </p>
<p><span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span> </p>
<p>试题七(共 15 分) <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p> 阅读以下说明和 C 代码,将应填入 _____(n)____ 处的字句写在答题纸的对应栏内。 </p>
<p>[ 说明 ] </p>
<p> 在一公文处理系统中,开发者定义了一个公文结构 OfficeDoc ,其中定义了公文应该具有的属性。当公文件的内容或状态发生变化时,与之相关联的 DocExplorer 结构的值都需要发生改变。一个 OfficeDoc 结构能够关联一组 DocExplorer 结构。当 OfficeDoc 结构的内容或状态发生变化时,所有与之相关联的 DocExplorer 结构都将被更新,这种应用被称为观察者模式。以下代码采用 C 语言实现,能够正确编译通过。 </p>
<p>[C 代码 ] </p>
<p> #include <stdio.h> </p>
<p>#define OBS_MAXNUM 20 /* 一个 OfficeDoc 变量最多能够关联的 DocExplorer 变量的个数 */ </p>
<p>typedef void (____(1)____) (struc OfficeDoc * ,struct DocExplorer *); </p>
<p>struct DocExplorer { </p>
<p>func update; /*DocExplorer 结构采用的更新函数 */ </p>
<p>/* 其它的结构字段省略 */ </p>
<p>}; </p>
<p>struct OfficeDoc{ </p>
<p>___(2)____ myObs[OBS_MAXNUM]; </p>
<p>/* 存储所有与 OfficeDoc 相关联的 DocExplorer 结构指针 */ </p>
<p>int index; /* 与 OfficeDoc 结构变量相关联的 DocExplorer 结构变量的个数 */ </p>
<p>}; </p>
<p>void attach(struct OfficeDoc *doc, struct DocExplorer *ob){ </p>
<p>/* 关联 Obersver 结构 ob 与 OfficeDoc 结构 doc*/ </p>
<p>int loop = 0; </p>
<p>if (doc -> index >= OBS_MAXNUM || ob == NULL) return; </p>
<p>for(loop = 0; loop < doc->index; loop++) </p>
<p>if (doc -> myObs[loop] == ob) return; </p>
<p>doc->myObs[doc->index] = ob; </p>
<p>doc->index++; </p>
<p>} </p>
<p>void detach(struct OfficeDoc *doc, struct DocExplorer *ob){ </p>
<p>/* 解除 doc 结构与 ob 结构间的关系 */ <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<p>int loop; </p>
<p>if(ob == NULL) return; </p>
<p>for(loop = 0;loop < doc->index; loop++){ </p>
<p>if(doc->myObs[loop] == ob){ </p>
<p>if (loop <= doc->index - 2) </p>
<p>doc->myObs[loop] = doc->myObs[____(3)____]; </p>
<p>doc->myObs[doc->index-1] = NULL;doc->index--; </p>
<p>breack; </p>
<p>} </p>
<p>} </p>
<p>} </p>
<p>void update1(struct OfficeDoc *doc, struct DocExplorer *ob){ </p>
<p>/* 更新 ob 结构的值 , 更新代码省略 */ } </p>
<p>void update2(struct OfficeDoc *doc, struct DocExplorer *ob){ </p>
<p>/* 更新 ob 结构的值,更新代码省略 */ } </p>
<p>void notifyObs(struct OfficeDoc *doc){ </p>
<p>/* 当 doc 结构的值发生变化时,通知与之关联的所有 DocExplorer 结构变量 */ </p>
<p>int loop; </p>
<p>for(loop = 0; loop < doc->index; loop++){ </p>
<p>(doc->myObs[loop])->update(____(4)____); </p>
<p>} </p>
<p>} </p>
<p>void main() { </p>
<p>struct OfficeDoc doc; /* 定义一 OfficeDoc 变量 */ </p>
<p>struct DocExplorer explorer1,explorer2; /* 定义两个 DocExplorer 变量 */ </p>
<p>/* 初始化与 OfficeDoc 变量相关的 DocExplorer 变量个数为 0*/ </p>
<p>doc.index = 0; </p>
<p>explorer1.update = update1; /* 设置 explorer1 变量的更新函数 */ </p>
<p>explorer2.update = update2; /* 设置 explorer2 变量的更新函数 */ </p>
<p>attach(&doc , &explorer1); /* 关联 explorer1 与 doc 对象 */ </p>
<p>attach(&doc , &explorer1); /* 关联 explorer1 与 doc 对象 */ </p>
<p>/* 其它代码省略 */ </p>
<p>_____(5)____; /* 通知与 OfficeDoc 相关的所有 DocExploer 变量 */ </p>
<p>return; </p>
<p> } <span class="style1">欢迎访问软件考试网(www.hbsoft.net)</span></p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"><!-- #BeginLibraryItem "/Library/copyrights.lbi" --> <span class="red9"><span class="gray8">©2005Copyright By hbsoft.net,All rights Reserved |<a href="../../Library/index/about.asp" target="_blank" class="red9">联系我们</a> <a href="http://www.miibeian.gov.cn" target="_blank" class="gray9">鄂ICP备05009730号</a></span>
<script>var tc_user="hbsoftidx";var tc_class="2";</script>
<script src="http://stat.t2t2.com/stat.js"></script>
</span><!-- #EndLibraryItem --></td>
</tr>
</table>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -