设计模式——代理模式(proxy)

某些接口之间的依赖,往往会带来问题,添加一层间隔的稳定接口来隔离接口,常常是一种解决办法。

facade,proxy,adapter,mediator属于接口隔离类。

motivation:在某些情况下(例如对象创建的开销很大,某些操作需要安全控制,或者需要进行线程外的访问),直接访问会给使用者或者系统带来很多麻烦;需要为其他对象提供一种代理一控制对该对象那个的访问。

key interface or class:

        1. facade的高层接口。

feature: facade接口,隔离开用户和子系统。

 

structure:

template codes:

///
class ISubject{
public:
    virtual void Process()=0;
}

class RealSubject:public ISubject
{
public:
    virtual void Process(){
        //实现具体的方法
    }
}

class ClientApp{
private:
    ISubject* subject;
public:
    ClientApp(){
        subject = new RealSubject();
        //因为一些原因,例如分布式或者安全原因等,不能直接拿到对象
    }
    void DoTask(){
        subject->Process();
    }
}


//proxy的实现,在此处实现对对象的访问
class RealSubject:public ISubject
{
public:
    virtual void Process(){
        //对对象的间接访问        
        //实现具体的方法
    }
}

class ClientApp{
private:
    ISubject* subject;
public:
    ClientApp(){
        subject = new RealSubject();
        //因为一些原因,例如分布式或者安全原因等,不能直接拿到对象
    }
    void DoTask(){
        subject->Process();
    }
}

summary:

1. 在面对对象的系统中,直接访问某个对象经常会带来很多麻烦,增加间接访问层往往是有效的解决方法;

2.proxy的实现粒度差别很大,有的可能对单个对象做细粒度的操作,有的可能对整个架构层次对对象做proxy,为组件模块提供抽象代理层;

3.proxy并不要求保持对接口的完整一致性,只要能够实现间接控制,牺牲部分透明性也是可以接受的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值