【C++设计模式】代理模式

#ifndef __PROXY_H__
#define __PROXY_H__

#include <string>

//【定义】
// 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

//【角色】
// 1) 抽象主题:通过接口或抽象类声明业务方法。
// 2) 代理角色:继承抽象主题,提供与抽象主题相同的接口;包含对真实主题对象的引用,在上下文中附加额外的操作。
// 3) 真实主题:实现抽象主题,定义要实现的业务逻辑,供代理角色调用。

//【意义】
// 代理主题角色内部含有对真实主题的引用,提供一个与真实主题相同的接口,从而可以在任何时候替代真实主题对象。
// 主题类和代理类是独立的组件,ConcreteSubject类并不知道Proxy类的存在,在进行修改时也不会相互之间产生影响(分而治之)。

//【示例】

//抽象主题
class iSubject
{
public:
	iSubject(){ }

	virtual ~iSubject(){ }

public:
	virtual void Proc(const std::string & value) = 0;
};

//真实主题
class ConcreteSubject : public iSubject
{
public:
	virtual void Proc(const std::string & value);
};

//代理
class Proxy : public iSubject
{
public:
	Proxy();

	~Proxy();

public:
	void DoSomething1();;

	void DoSomething2();;

	virtual void Proc(const std::string & value);

private:
	iSubject * m_subject;
};


void TestProxy();

#endif

#include "Proxy.h"

void ConcreteSubject::Proc(const std::string & value)
{
	printf("ConcreteSubject Proc %s \n",value.c_str());
}

Proxy::Proxy()
{
	m_subject = NULL;
}

Proxy::~Proxy()
{
	if (m_subject)
	{
		delete m_subject;
		m_subject = NULL;
	}
}

void Proxy::DoSomething1()
{
	printf("------------------------------------------ \n");
}

void Proxy::DoSomething2()
{
	printf("------------------------------------------ \n");
}

void Proxy::Proc(const std::string & value)
{
	this->DoSomething1();

	if (NULL == m_subject)
	{
		m_subject = new ConcreteSubject();
	}

	m_subject->Proc(value);

	this->DoSomething2();
}

void TestProxy()
{
	iSubject * proxy = new Proxy();

	proxy->Proc("12345");

	delete proxy;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值