设计模式C++实现(8)——代理模式.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:5 大小:36KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

设计模式C++实现(8)——代理模式.doc

设计模式C++实现(8)——代理模式.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"设计模式C++实现(8)——代理模式分类:HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/category/859763"设计模式2011-08-0815:051774人阅读HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\l"comments"评论(0)HYPERLINK"javascript:void(0);"\o"收藏"收藏HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\l"report"\o"举报"举报软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》(DP)两本书。本文介绍代理模式的实现。[DP]上的定义:为其他对象提供一种代理以控制对这个对象的访问。有四种常用的情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用。本文主要介绍虚代理和智能引用两种情况。考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形对象的创建开销很大。但是打开文档必须很迅速,因此我们在打开文档时应避免一次性创建所有开销很大的对象。这里就可以运用代理模式,在打开文档时,并不打开图形对象,而是打开图形对象的代理以替代真实的图形。待到真正需要打开图形时,仍由代理负责打开。这是[DP]一书上的给的例子。下面给出代理模式的UML图。简单实现如下:[cpp]HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"copy"copyHYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"print"printHYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"?"?classImage{public:Image(stringname):m_imageName(name){}virtual~Image(){}virtualvoidShow(){}protected:stringm_imageName;};classBigImage:publicImage{public:BigImage(stringname):Image(name){}~BigImage(){}voidShow(){cout<<"Showbigimage:"<<m_imageName<<endl;}};classBigImageProxy:publicImage{private:BigImage*m_bigImage;public:BigImageProxy(stringname):Image(name),m_bigImage(0){}~BigImageProxy(){deletem_bigImage;}voidShow(){if(m_bigImage==NULL)m_bigImage=newBigImage(m_imageName);m_bigImage->Show();}};客户调用:[cpp]HYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/6669219"\o"copy"copyHYPERLINK"http://blog.csdn.net/wuzhekai1985/article/details/666921