- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08计科1班18号罗会枫《设计模式》中期检查
华南农业大学珠江学院
《设计模式》课题中期检查
专 业:____计算机科学与技术_______
班 级:___08计算机科学与技术01___
学 号: __200830400118____________
姓 名:___罗会枫__________________
导 师:___张基温__________________
题 目:对观察者模式和代理模式的设计
完成日期:2011年6月8日
对观察者模式和代理模式的初步认识和实例初步设计,具体如下所示:
1.观察者模式
1.1实例分析
对于观察者模式,本人现在的构思是设计一个读者“订阅电视报纸”的实例,由于现对观察者模式的理解不够深入,所以对其进行简单的设计。
“订阅电视报纸”的意义就在于读者可以随意订阅不同报社的不同类的内容,管理员可以对内容进行更新操作,这个操作是在客户端进行的。其实就是一个MVC模式的体现。在本例中,设计的是一个推和拉的过程。所谓推就是具体主题将变化后的数据全部交给具体观察者。所谓拉就是具体主题不将变化后的书籍交给具体观察者,而是提供了获得这些数据的方法,具体观察者在得到通知后,可以调用具体主题提供的方法得到数据,但需要自己判断数据是否发生了变化。
1.2“订阅电视报纸”UML类图
图1-1 “订阅电视报纸”UML类图
1.3代码设计
#include string
#include iostream
#include vector
using namespace std;
class ClassifySubject;
//媒体
class MediaObserver
{
protected:
string name;
ClassifySubject* cz;
string content;
public:
MediaObserver(string nm,string ct,ClassifySubject* c)
{
name=nm;
cz=c;
content=ct;
}
virtual void Update()=0;
};
//具体的观察者
class Media:public MediaObserver
{
public:
Media(string nm,string ct,ClassifySubject* c):MediaObserver(nm,ct,c)
{
}
virtual void Update();
};
//抽象通知者
class ClassifySubject
{
public:
string action1;
vectorMediaObserver*observers;
virtual void Attach(MediaObserver* observer)=0;
virtual void Notify()=0;
};
//具体通知者 分类
class Classify:public ClassifySubject
{
public:
void Attach(MediaObserver* mo)
{
observers.push_back(mo);
}
void Notify()
{
vectorMediaObserver*::iterator p=observers.begin();
while(p!=observers.end())
{
(*p)-Update();
p++;
}
}
};
void Media::Update()
{
coutendl;
cout客户账号:name
\n订阅的是《cz-action1》报社的cz-action2分类
\n客户收到的内容是:contentendl;
}
int main()
{
string name;
string content;
string MD1;
string MD2;
cout罗会枫_观察者模式测试结果:endl;
cout管理员更新内容:;
cincontent;
cout请输入客户的账号:;
cinname;
cout请输入您想订购的报社:南方日报、广州日报、中国新闻出版报、中国图书商报、中华读书报等等报社endl;
coutMD1=;
cinMD1;
cout请输入您想订阅的种类:新闻、学习、图书、体育、车行、营养等等endl;
coutMD2=;
cinMD2;
ClassifySubject *p=new Classify();
MediaObserver *m=new Media(name,content,p);
p-Attach(m);
p-action1=MD1;
p-action2=MD2
您可能关注的文档
- 计算机网络B答案.doc
- 第八讲等比数列复习.doc
- 安徽农业大学2012考研卷.doc
- 定额发票管理办法-副本.doc
- 公元2012年农历壬辰年龙年.doc
- 7.5地理教案.doc
- 北区2011年总结2012年预算.ppt
- 八上语文第六单元复习导学案.doc
- QA过程 0509 .ppt
- 电厂锅炉运行试卷 二 .doc
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江西省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年安徽省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年福建省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年广东省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河南省高考英语试卷(含答案解析)+听力音频.docx
- 2024年湖北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江苏省高考英语试卷(含答案解析)+听力音频+听力原文.docx
文档评论(0)