设计模式之代理模式-做个代理也挺好!

一、代理模式的概念

代理模式是构造型设计模式,它可以为其他对象提供一种代理以便控制对这个对象的访问。

二、代理模式使用场景

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、实现代理模式需要做额外的工作,可能会比较复杂。

能力有限,如有错误,多多指教。。。

posted @ 2020-02-16 19:22  ISmileLi  阅读(4)  评论(0编辑  收藏  举报