//说些废话
代理模式,这个是看过的几个模式中最容易理解的了,但其实我觉得应用的地方还是蛮多的,至少虚拟代理这块就可以用在很多地方了。
//部分资料来源:
1.C++设计模式(智能指引的实现):http://www.jellythink.com/archives/301
2.java实现的虚拟代理:http://blog.csdn.net/shuangde800/article/details/10324991
3.java实现的远程代理:http://www.cnblogs.com/rush/archive/2011/06/19/2084775.html
4.程杰——大话设计模式
//正文:
这个模式比较容易理解,我就举了个简单的例子,我们平时吃的黄油面包,你吃的是包,但味道是黄油的味道。
这就是面包看作一个代理,面包其中有些黄油(真实实体),然后味道是黄油提供的,他们都继承并重写了味道类的味道函数。
X个代码:
#include <QCoreApplication>
#include <iostream>
using namespace std;
class Taste
{
public:
virtual void taste() = 0;
};
class Butter : public Taste
{
public:
void taste()
{
cout<<"butter taste"<<endl;
}
};
class Bread : public Taste
{
private:
Butter *butter;
public:
void taste()
{
if(butter == nullptr)
butter = new Butter();
butter->taste();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Bread *bread = new Bread();
bread->taste();
return a.exec();
}
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实[DP]
也就是说,你想远程访问一个网页,你在你的项目里创建了一个Web引用,当你调用它,就是调用代理的过程,然后实现了远程访问。
2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象[DP]
也就是说,你上饿了么订个外卖,里面有很多商家图片,你没滑到那个商家的时候,那个商家的图片要加载出来,还未加载图片的那些,就是虚拟代理了。代理存储了图片的路径和尺寸。
3.安全代理,用来控制真实对象访问时的权限[DP]
这个找不到具体例子,我是这么理解的:你代理一个对象的时候,根据这个对象的访问权限,设置你代理允许对外表现的功能,实现安全访问。(不知道对不对)
4.智能指引,是指当调用真实的对象时,代理处理另外一些事[DP]
这个在链接中作者有好好说了,其实就是在代理里面处理了对象引用时的计数或者其他内务问题。
再来说说代理模式和装饰模式的异同:
唔,虽然网上有很多解答,但我觉得最简单的说法就是:
同:
都存放了被调用对象的引用。
装饰模式是用装饰链去为某个对象添加功能,防止类爆炸。m装饰类:1具体类。
代理模式是针对一对一的,A帮B表现B的功能。1代理类:1具体类。(想了下好像 1代理类:n具体类 也可以,反正不是m:1)
//问题:
1.
Q:什么时候用代理模式?
A:当你想隐蔽你的具体类,当你实现加载图片,当你实现远程代理,当你想在另外一个类内处理某个对象的内务。