代理模式

一 应用场景
相亲的时候一般有一个媒人,男方说什么话都通过媒人传递给女方。

二 定义
代理模式Proxy Pattern:给某个对象提供一个代理,并由代理对象控制对原对象的引用,代理对象是一种对象结构模式。

这里写图片描述
Subject 抽象主题角色:声明真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题,客户端通常都要针对抽象主题进行编程。

Proxy 代理主题角色:代理主题包含了对真实主题角色的引用,从而可以在任何时候都代替真实的主题,并对真实的主题加以约束。

RealSubject 真实主题:代理角色所代表的真实对象,实现真实的业务操作。

通常有:远程代理、虚拟代理、保护代理、缓冲代理、智能引用代理。

三 C++实现一个代理模式
Subject.h

#pragma once

class Subject
{
public:
    Subject(){}

    virtual ~Subject(){}

    virtual void saySth() = 0;
};

Boy.h

#pragma once

#include <iostream>
#include "Subject.h"
using namespace std;


class Boy:public Subject
{
public:
    Boy(){}

    virtual ~Boy(){}

    void saySth(){
        std::cout << "Boy love you" << std::endl;
    }
};

ProxyBoy.h

#pragma once
#include "Boy.h"

class ProxyBoy
{
private:
    Subject * s;

public:
    ProxyBoy(Subject * _s):s(_s){}

    virtual ~ProxyBoy(){}

    void saySth(){
        s->saySth();
    }
};

main.cpp

#include <iostream>
#include <string>
#include "ProxyBoy.h"

int main()
{
    ProxyBoy * p_b = new ProxyBoy(new Boy());
    p_b->saySth();
    system("pause");
    return 0;
}

运行结果
这里写图片描述

四 总结
优点
1 代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度。
2 可以为不同的用户提供不同的操作权限
3 增加代理时,无需修改源代码,符合开闭准则
缺点:
1 增加了一个代理层,会使系统变慢
2 代理模式可能会很复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值