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

来源:互联网 发布:中万网络靠谱吗 编辑:程序博客网 时间:2024/06/12 00:15

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

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

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

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

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

下面是个简单的示例:

#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
原创粉丝点击