委托设计模式(即代理模式)

设计模式&委派模式(Delegate Pattern) 深入分析委派模式,实际案例展示 阅读详情
问题

至少在以下集中情况下可以用 Proxy 模式解决问题:
1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成, GoF 称之为虚代理(Virtual Proxy);
2)为网络上的对象创建一个局部的本地代理, 比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成, GoF 称之为远程代理(Remote Proxy);
3) 对对象进行控制访问的时候, 比如在 Jive 论坛中不同权限的用户(如管理员、 普通用户等) 将获得不同层次的操作权限, 我们将这个工作交给一个代理去完成, GoF 称之为保护代理(Protection Proxy)。
4) 智能指针(Smart Pointer), 关于这个方面的内容, 建议参看 Andrew Koenig 的《C++沉思录》中的第 5 章。
模式选择
Proxy 模式典型的结构图为:
这里写图片描述
图 2-1: Proxy Pattern 结构图
实际上, Proxy 模式的想法非常简单,

实现

完整代码示例(code)
Proxy 模式的实现很简单, 这里为了方便初学者的学习和参考, 将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)。
代码片断 1: Proxy.h

//Proxy.h
#ifndef _PROXY_H_
#define _PROXY_H_
class Subject
{
public:
    virtual ~Subject();
    virtual void Request() = 0;
protected:
    Subject();
private:
};
class ConcreteSubject:public Subject
{
public:
    ConcreteSubject();
    ~ConcreteSubject();
    void Request();
protected:
private:
};
class Proxy
{
public:
    Proxy();
    Proxy(Subject* sub);
    ~Proxy();
    void Request();
protected:
private:
    Subject* _sub;
};
#endif //~_PROXY_H_

代码片断 2: Proxy.cpp

//Proxy.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
Subject::Subject()
{
}
Subject::~Subject()
{
}
ConcreteSubject::ConcreteSubject()
{
}
ConcreteSubject::~ConcreteSubject()
{
}
void ConcreteSubject::Request()
{
    cout<<"ConcreteSubject......request...."<<endl;
}
Proxy::Proxy()
{
}

Proxy::Proxy(Subject* sub)
{
    _sub = sub;
}
Proxy::~Proxy()
{
    delete _sub;
}
void Proxy::Request()
{
    cout<<"Proxy request...."<<endl;
    _sub->Request();
}

代码片断 3: main.cpp

//main.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
    Subject* sub = new ConcreteSubject();
    Proxy* p = new Proxy(sub);
    p->Request();
    return 0;
}
代码说明

Proxy 模式的实现很简单,这里不做多余解释。
可以看到,示例代码运行后, p 的 Request 请求实际上是交给了 sub 来实际执行。

讨论

Proxy 模式最大的好处就是实现了逻辑和实现的彻底解耦。

设计模式之委托模式的demo 使用c++实现的委托模式源代码,供学习设计模式参考使用 立即下载

相关推荐

华为无线AP+AC(ensp)

VLAN 100--192.168.100.0/24为AP的管理IP地址VLAN10--192.168.10.0/24为无线用户获取的IP地址在DHCP Server(LSW3)上查看地址分配情况。

abcdlalal的博客 1万+

设计模式-委派模式

通俗点讲就是有两个对象参与(两个对象协同)处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。可以发现和静态代理类的类图一样,所以也叫做特殊的静态代理,唯一的区别就是关注点不一样,一个是过程一个是结果代码如下: 代码示例 举个典型的例子:路由,我们知道路由的作用就是在不同网段之间转发数据的,当路由器接受到一个消息的时候她会根据消息头部中的信息找出对应网段再根据自己的路由表找到对应的机器再转发给实际接收者,这里面路由就是一个委托者角色而注册到这个路由中的计算机则是实际执行

BASK2311的博客 1189

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 184

设计模式-委托模式

模式定义 温馨提示:内容较多建议收藏阅读,大约需要5分钟。代码可在GitHub中阅读:欢迎star。https://github.com/UniqueDong/zero-design-p...

码哥字节 1290

Unity AssetBundle 之 (入门)简单的资源打包成AB包的方法

Unity AssetBundle 之 (入门)简单的资源打包成AB包的方法 目录 Unity AssetBundle 之 (入门)简单的资源打包成AB包的方法 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、关键代码 一、简单介绍 Unity中的一些基础知识点。 本节介绍,Asset Bundle 在 Unity中的使用,入门第一篇,如何AssetBundle标记,如何打包成AssetBundle的操作方法,有不对的地方欢迎指正。...

仙魁XAN 1万+

利用dxflib读写cad文件

本篇主要在qt做一个例子读取cad文件数据,使用的开源库是dxflib。用到dxflib的DL_CreationAdapter,DL_Dxf。DL_Dxf是用来读取.dxf文件的类,DL_CreatinAdapter是一个容器,当DL_Dxf加载.dxf文件后,就会响应DL_CreationAdapter这个类,读取cad数据。我们来看看...

weixin_33759269的博客 1984

Java设计模式(5):代理模式

定义 为其他对象提供一种代理以控制这个对象的访问。 代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。 为什么要采用这种间接的形式来调用对象呢?一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象来完成间接的访问。 在现实生活中,这种情形非常的常见,比如请一个律师代理来打官司。 代理模式...

qq_36699930的博客 1049

Android系统内存和性能关系的调研

摘要:本文分析了低内存导致性能问题的判断方法和评估思路。通过监控/proc/vmstat中的allocstall_normal、pageoutrun等指标可判断内存回收频率,当MemFree、MemAvailable和Cached均低于500MB时可能出现明显卡顿。全文通过实验和理论验证分析,回答因内存瓶颈导致性能问题的一些分析和解决的思路。

jidapenglin28的专栏 132

设计模式 - 代理模式、委托模式

前言 个人认为代理模式和委托模式没有本质的区别,虽然很多书和Blog区分两中设计模式,但是这两种设计模式都是为其他对象提供代理服务,利用新的对象来对真实对象的属性或者方法实现隔离,防止外部直接访问真实对象; 其实从下面例子中可以发现,委托的例子只是在代理对象中多了真实对象的转换而已,其实本质没有变化; Java或者Android系统中的代理或者委托应用 系统中使用动态代理非常多,但是静态代...

Android 一亩良田 882

【STM32实物】基于STM32+ESP32+手机APP设计的智能宠物喂食系统

本文以STM32单片机为主控MCU,配有压力传感器、温湿度传感器、光照强度传感器、蜂鸣器等,设计了一款可以远程控制的宠物智能喂食系统。用户可以通过APP下达指令,控制宠物的喂食。每天可以根据设置的数据进行精准喂食,成本相对较低的宠物喂食装置。该装置使用步进电机控制投食仓门的开闭,通过压力传感器和时钟系统控制每日的投喂量和投喂时间。每次投食后蜂鸣器会提醒宠物进食,树立每日定点进食的习惯。经测试得出,该设备确实能实现每日定时定量投喂。系统整体运行顺畅,所有预期功能得以实现。它非常适合解决宠物主人不在家时影响宠物

嵌入式阿齐Archie 2万+

行人检测模型在海思平台上的部署:从 PyTorch 到 NNIE 深度优化与实践

摘要 本文详细介绍行人检测模型从PyTorch到海思NNIE平台的部署流程。首先分析了行人检测面临的挑战(尺度变化、遮挡、姿态多样性等)及边缘部署的优势(实时性、隐私保护等)。重点阐述了模型转换过程:PyTorch→ONNX→Caffe→NNIE-WK,其中PyTorch转ONNX需注意评估模式设置、虚拟输入匹配、操作集版本选择等关键点。文章旨在帮助开发者在海思3516D芯片上实现高效的行人检测,克服部署过程中的常见问题,最终实现边缘设备的实时目标检测能力。

FJN110的博客 218

【设计模式】委托模式和代理模式

委托模式和代理模式都是常见的设计模式,它们都涉及到对象之间的协作和交互,但是它们的实现方式和应用场景有所不同。

qq_45687669的博客 685

【JAVA】海康威视门禁机ISAPI接口开发,人脸上传更新接口

本文实现了一个HTTP工具类HTTPClientUtil,提供GET/POST/PUT/DELETE请求方法,支持摘要认证。工具类封装了Apache HttpClient,设置连接超时、最大连接数等参数,通过DeviceInfoDTO传递设备IP、端口和认证信息。文中还展示了两个应用示例:userInfoAdd()用于添加人员信息,FaceDataRecordAdd()用于添加人脸数据,均通过POST请求与设备ISAPI接口交互。该工具类简化了HTTP请求处理,支持设备管理系统的集成开发。

qq_27246521的博客 590

结构型模式之代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 介绍 代理主要由三部分组成: 协议: 用来指定代理双方可以做什么,必须做什么 代理: 根据指定的协议,完成委托方需要实现的功能 委托: 根据指定的协议,指定代理去完成什么功能 Protocol-协议的概念 从上图中可以看出三者之间的关系,在实际应用中通过协议来规定代理双方的行为,协议...

weixin_30426957的博客 168

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式05-代理模式(委托模式)

代理模式(委托模式) 就拿买书来说吧,先抽象一个买书接口,有实体店买书,而当当网可以操作实体店买书,但当当网自己可以做一些活动,比如打折,优惠券之类的。这个当当网就是一个中间层。 #include<iostream> using namespace std; class sbject{ public: virtual void sailbook() = 0; }; class R...

FairLikeSnow的博客 288

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【设计模式】-委托与代理模式

proxy :代理, 被代理方(B)与代理方(A)的接口完全一致。 主要使用场景(语义)应该是:为简化编程(或无法操作B),不直接把请求交给被代理方(B),而把请求交给代码方(A),由代理方与被代理方进行通信,以完成请求。 delegete : 委托,主要语义是:一件事情(或一个请求)对象本身不知道怎样处理,对象把请求交给其它对象来做。

宣晨光 861

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

设计模式(二):代理模式(委托模式)

代理模式 组成: 抽象角色:通过接口或者抽象类声明真实角色实现的业务方法 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所需要实现的业务逻辑,供代理角色调用 代理的基本作用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protoco...

JGL357的博客 1221

六 设计模式之代理模式(或称委托模式)

<br />定义   为其它对象提供一种代理以控制对这个对象的访问<br />类图<br /><br /><br /><br /><br /><br />通用代码 抽象主题类 public interface Subject { public void request(); } 真实主题类 public class RealSubject implements Subject { @Override public void request() { //具体业务处理 } } 代

guojun828的专栏 1万+

设计模式:代理模式(委托模式)

个人笔记d

博风_刺耳的博客(网络记事本) 564

[设计模式](六):装饰器模式(Decorator)和代理模式(Proxy)|委托模式(Delegater )

[设计模式](六):装饰器模式(Decorator)和代理模式(Proxy)|委托模式(Delegater )

身披白袍的博客 6746

原来很多人弄不清代理模式和委托模式的区别啊

昨天,CocoaChina一篇首页文章,谈到了iOS中的设计模式,还连续两天占据首页。然而笔者对代理模式和委托模式,代理模式和组合模式的差异都不清楚,来写这样一个题目,真是有点汗颜。当然其中的代码编写技巧,对开始写OC代码,代码量比较少的童鞋还是有一定启发意义的。在留言区中,我跟笔者做了一番探讨。数字的用户名是我,对方是文章作者。 转载于:https://www.cnblogs.co...

weixin_30820077的博客 621

11 设计模式之代理模式(送资料案例)

代理模式(Proxy Pattern)是一种结构型设计模式,它通过引入代理对象来控制对某个对象的访问。代理对象可以在访问实际对象之前或之后进行一些额外的操作。代理模式可以帮助我们在不改变原有对象的情况下,为对象提供附加功能。

Theodore_1022的博客 1556

代理模式 委派模式 策略模式_委托模式

一、委托模式简介(注:)不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式。特点:持有被委托人的引用,不关心过程,只关心结果。归类:行为型模式核心:可以理解为静态代理和策略模式一种特殊的组合。二、与代理模式的区别代理模式:注重过程委托模式:注重结果三、与策略模式的区别注重的外部扩展注重的是内部的灵活和复用四、实战演练demo事例:老板给经理安排了A需求,经理接了,然后安排给程序员1去...

weixin_33512961的博客 345

【编程素质】设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能

为其他对象提供一种代理以控制对这个对象的访问。对象的使用有三种方式:组合、继承、委托(C++),代理模式是委托的一种java实现。

午后阳光 1243

【设计模式】深入解析代理模式(委托模式):代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现

代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现

OuO-1 的博客 1362
上一篇: gdb调试相关
下一篇: 观察者模式
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值