设计模式C++版:第七式代理模式

开始代理模式以前我们先说一下什么是代理。这个词想必生活中听过见过的太多,比如经销商的烟酒代理,洗漱用品代理等,其实经销代理也就是我们常说的批发商,他们从厂家那里拿货,而后卖给实际用户。

经销商的代理好处是什么,为什么厂家不直接卖给用户赚钱呢?

比如说我们常用的笤帚什么的,一家厂家的用户全体是全国乃至全世界所有的用户,它不可能和数以百万乃至千万计中的每一个客户打交道。于是每个地区有一个批发商,批发商和客户打交道,而它只需要和批发商打交道就可以了。全国的省部级别的地方,就三十多个,这样他处理起来是不是一下子方便了很多。这种代理是一种树形的,组织扩散放大型的代理。

现在又出现了互联网时代的代理——电商,每一家电商都可以代理很多的产品,而后通过自家平台直接和客户打交道。这种是反向树,一种集中式的代理。这种代理容易出现客大欺店的情况。在编程上来看,就是一旦这个集中式的中间代理挂掉,所有的服务和用户全部失去联系。风险较大。

现在用编程的角度来简单定义一下代理:为一个对象提供对另外一个对象的访问或控制的行为即为代理。

下面是个简单的示例:

#include<iostream>
using namespace std;

class Interface
{
public:
	virtual void SellDolls(){};
	virtual void SellFlowers(){};
};


class Company :public Interface
{
public:
	Company(const string *name)
	{
		customername = name;
	}
	virtual void SellDolls(){ cout<< "把布偶卖给"<<customername->c_str()<< endl; }
	virtual void SellFlowers(){ cout<<"把花卖给" <<customername->c_str() << endl; }
private:
	const string* customername;
};

class Proxy :public Interface
{
public:
	Proxy (const string* customername);
	~Proxy();
	virtual void SellDolls()
	{
		m_Company->SellDolls();
	}

	virtual void SellFlowers()
	{
		m_Company->SellFlowers();
	}
private:
	Company *m_Company;
};

Proxy::Proxy(const string *grilname) :m_Company(nullptr)
{
	m_Company = new Company(grilname);
}

Proxy::~Proxy()
{
	if (m_Company!=nullptr)
	{
		delete m_Company;
	}
}

int main()
{
	const string customername = "玛利亚";

	Proxy proxy(&customername);

	proxy.SellDolls();
	proxy.SellFlowers();

	return 0;
}

运行结果如下:


另外提个问题,如果有一个程序组件作为客户端和服务端的中间件,帮助转发消息,是不是代理呢。答案是,是的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值