设计模式:代理(Proxy)模式

  • 分类:结构型模式
  • 特点:为其他对象提供了一种代理,以控制对这个对象的访问。
  • 模式结构:
    • UML图:略(后补)
    • Subject(抽象主题):声明了 RealSubject 与 Proxy 的共同接口,定义了某个/些功能。
    • RealSubject(真实主题):通常执行具体的业务逻辑,Proxy 控制对它的访问。
    • Proxy(代理):持有一个 RealSubject 引用(指针),可以在需要时将请求转发给 RealSubject,以此起到代理的作用。
    • Client(客户端):通过 Proxy 间接地与 RealSubject 进行交互。
  • 适用场景:
    • 远程代理(Remote Proxy),虚拟代理,保护代理,缓冲代理,智能引用代理等。
  • 实例分析
    • 代码语法说明:override关键字:override保留字表示当前函数重写了基类的虚函数。作用1:在函数比较多的情况下可以提示读者某个函数重写了基类虚函数,作用2:强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。
    • 案例背景:在现实生活中,代理无处不在 - 代购、手机代理商、火车票代售点。。。
      这里,代理模式可以理解为:移动公司把充值的职责托付给代理点,代理点代替移动公司充值,客户直接与代理点打交道,而非移动公司。
  • 1、创建抽象主题:为其提供一个接口 Recharge(),用于充值
//subject.h
#ifndef __SUBJECT_H__
#define __SUBJECT_H__

class ITeclo
{
public:
	ITeclo() {}
	virtual ~ITeclo() {}
	virtual void Recharge(int money) = 0;
};

#endif //SUBJECT_H
  • 2、创建真实主题:继承自抽象主题类,提供了业务方法的具体实现
//real_subject.h
#ifndef __REAL_SUBJECT_H__
#define __REAL_SUBJECT_H__

#include "subject.h"
#include<iostream>

class CMCC : public ITeclo
{
public:
	CMCC() {}
	void Recharge(int money) override
	{
		std::cout<<"charge "<< money << std::endl;
	}
};

#endif //REAL_SUBJECT_H
  • 3、创建代理:代理商对用户限制,低于50不可充值
//proxy.h
#ifndef __PROXY_H__
#define __PROXY_H__

#include "subject.h"
#include "real_subject.h"

class Proxy : public ITeclo
{
public:
	Proxy() { m_pCMCC = NULL; }
	~Proxy() { delete m_pCMCC; }

	void Recharge(int money) override
	{
		if (money >= 50)
		{
			if (m_pCMCC == NULL)
				m_pCMCC = new CMCC();
			m_pCMCC->Recharge(money);
		}
		else
			std::cout << "money is little!" << std::endl;
	}
private:
	CMCC* m_pCMCC;

};


#endif //PROXY_H
  • 4、创建客户端:可进行多次充值
//main.cpp
#include "proxy.h"

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) {if(p != NULL) delete p; p = NULL;}
#endif

int main()
{
	Proxy* pProxy = new Proxy();
	pProxy->Recharge(30);
	pProxy->Recharge(100);

	system("pause");
	return 0;
}
  • 运行结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值