设计模式之代理模式-做个代理也挺好!
一、代理模式的概念
代理模式是构造型设计模式,它可以为其他对象提供一种代理以便控制对这个对象的访问。
二、代理模式使用场景
1、在直接使用对象时会给使用者带来很多麻烦的时候,增加一个中间层(即代理)来间接使用对象。
三、代理模式构建方法
1、抽象主题类
真是主题与代理主题的共同接口类。
2、真实主题类
定义了真实对象类的所有接口。
3、代理主题类
含有真实主题对象的引用,代理角色通常在将客户端调用传给真实主题对象之前或者之后,会做一些额外的操作。
四、代理模式的示例
// ProxyPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
using namespace std;
class AbstractSubject
{
public:
virtual void saleBook() = 0;
private:
};
// RealSubject
class BookStore : public AbstractSubject
{
public:
virtual void saleBook()
{
cout << "bookstore sell books." << endl;
}
private:
};
// ProxySubject
class TaoBao : public AbstractSubject
{
public:
void discount()
{
cout << "discount sell" << endl;
}
virtual void saleBook()
{
cout << "TaoBao is a proxy" << endl;
discount();
m_bookStore.saleBook();
}
private:
BookStore m_bookStore;
};
#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
int main()
{
cout << "----------ProxyPattern----------" << endl;
TaoBao *pTaoBao = new TaoBao;
pTaoBao->saleBook();
DELETE_PTR(pTaoBao);
std::cout << "Hello World!\n";
getchar();
}
运行结果:
五、代理模式的优缺点
优点:
1、职责清晰明确
2、扩展性比较强
缺点:
1、增加了代理层,可能会导致处理速度变慢,对性能有影响。
2、实现代理模式需要做额外的工作,可能会比较复杂。
能力有限,如有错误,多多指教。。。
本文为博主原创文章,未经博主允许请勿转载!作者:ISmileLi