设计模式-代理模式-笔记

动机(Motivation)

在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要远程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。

如何在不去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。

模式定义

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。

示例1:

cpp 复制代码
class ISubject {
public:
    virtual void process() = 0;
    virtual ~ISubject() {};
};

class RealSubject : public ISubject {
public:
    virtual void process() {
        //...
    }
};

class ClientAPP {
    ISubject* subject_;

public:

    ClientAPP() {
        subject_ = new RealSubject();
    }
    
    void DoTask() {
        //...
        subject_->process();
        //....
    }
};

示例2:

cpp 复制代码
class ISubject {
public:
    virtual void process() = 0;
    virtual ~ISubject() {};
};

class RealSubject : public ISubject {
public:
    virtual void process() {
        //...
    }
};

//Proxy设计
class SubjectProxy : public ISubject {
    ISubject* subject_;
public:
    SubjectProxy(){
        subject_ = new RealSubject();
    }

    ~SubjectProxy() {
        delete subject_;
        subject_ = nullptr;
    }

    virtual void process() {
        //对RealSubject的一种间接访问
        //...
        subject_->process();
    }
};

class ClientAPP {
    ISubject* subject_;

public:

    ClientAPP() {
        subject_ = new SubjectProxy();
    }

    void DoTask() {
        //...
        subject_->process();
        //....
    }
};

要点总结:

"增加一层间接层"是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。

具体proxy设计模式的实现方法,实现颗粒度多相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。

Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损失一些透明性是可以接受的。

相关推荐
月屯5 分钟前
docke笔记下篇
笔记
能不能别报错1 小时前
K8s学习笔记(二):Pod
笔记·学习·kubernetes
呱呱巨基2 小时前
C/C++ 内存管理
c++·笔记·学习
jingling5552 小时前
uniapp | 快速上手ThorUI组件
前端·笔记·前端框架·uni-app
不一样的少年_2 小时前
Vue3 后台分页写腻了?我用 1 个 Hook 删掉 90% 重复代码(附源码)
前端·vue.js·设计模式
A阳俊yi3 小时前
设计模式——七大常见设计原则
设计模式
lingggggaaaa3 小时前
小迪安全v2023学习笔记(八十二讲)—— Java组件安全&Solr&Shiro&Log4j&CVE复现
笔记·学习·安全
好望角雾眠3 小时前
第四阶段C#通讯开发-1:通讯基础理论,串口,通讯模式,单位转换,代码示例
开发语言·笔记·c#·串口·通讯
青草地溪水旁4 小时前
设计模式(C++)详解——建造者模式(1)
c++·设计模式·建造者模式
贝塔实验室5 小时前
两种常用的抗单粒子翻转动态刷新方法
论文阅读·经验分享·笔记·科技·学习·程序人生·fpga开发