请问大神们指点一下关于C++代理(委托)设计模式的问题

static void function()
{
printf("this is a function\n");
}

class Fun
{
public:
virtual void func() = 0;
};

class RealFun : public Fun
{
public:
void func()
{
function();
}
};

class DelegateFun :public Fun
{
public:
RealFun *realFun;
DelegateFun()
{
realFun = new RealFun;
}
void func()
{
realFun->func();
printf("this is a delegate\n");
}
};

int _tmain(int argc, _TCHAR* argv[])
{
DelegateFun delegateFun;
delegateFun.func();
getchar();
return 0;
}
我想问一下我这个简单的例子算不算代理设计模式,这样是不是绑定了全局函数

0

2个回答

可以算代理模式,但是你要知道什么情况下用代理模式。

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

你的程序中一个全局函数,写一个代理模式,这个叫做画蛇添足。我可以给你一个实际的场景,你体会下。

比如你有一个函数,fun();
你原先直接调用它就好了。

现在我们需要改一改,这个函数我们放在服务器上,而你的调用放在另一个客户计算机上。
现在的问题来了,都不是一个计算机,你怎么调用服务器上的这个函数呢?
你想到了一个办法,服务器上用socket监听一个端口,如果有别的计算机和它通讯,告诉它应该调用fun,并且传什么参数,这个网路通讯的程序就去调用fun(),传入参数,并且把fun()的结果通过网络返回客户端。

客户端怎么做?因为问题转化为网络通讯了,而不是调用函数了,当然,你可以直接写死,怎么发数据,怎么收数据。这样就完成了功能。

但是你也可以用代理模式封装一下,做法和服务器的socket类似,你也写一个函数,叫fun(),表面上看它和服务器上的那个一样,但是它不实际实现fun()真正的功能,而是接受传入的参数,开一个网络连接,发送函数调用的请求,服务器返回的数据作为它的返回再返回。

这样你的客户端调用这个客户端上的fun()感觉好像是这个fun()就是一个实际有功能的函数一样,这就是代理模式的用处。

4
qq_20399407
qq_20399407 谢谢你的回答,对我理解代理设计模式很有帮助
接近 4 年之前 回复

没有人,自己顶一哈,求帮助

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Objective-C中的协议和代理(委托)设计模式
一、协议:          Objective-C中的协议(Protocol)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。协议(Protocol)通常用来实现委托对象(Delegate Object)。委托对象(Delegate Object)一般用来自己定义行为或者动作,也就是调用自己定义方法,但自己不实现该方法,委托其它的类来实现该方法。 1. 协议的声明:
【设计模式】委托模式
委托模式 分类 编程技术 委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。 简单的Java例子 在这个例子里,
设计模式中代理(proxy)与委托(delegate)的语义区别
2014年10月17日 05:39:19      今天经浩哥与柏哥的解释,自己终于掌握了proxy与delegete语义的区别:      proxy :译为代理, 被代理方(B)与代理方(A)的接口完全一致。 主要使用场景应该是:为简化编程(或无法操作B),不直接把请求交给被代理方(B),而把请求交给代码方(A),由代理方与被代理方进行通信,以完成事情。      delegete :
代理模式与委托模式的异同点
 在《设计模式之禅》(第二版)中,作者说“代理模式也叫做委托模式”,显然是认为代理模式和委托模式是毫无差别的。然而在实际开发中,我们通常可以很明确的知道一个模式究竟是代理模式还是委托模式,说明两者之间还是有一些区别的。 代理模式和委托模式的相同点很容易理解,都是把业务的需要实现的逻辑交给一个目标实现类来完成。 那么,他们的差别在哪里呢?之前看网上的一个解释说:代理模式的代理类和实现类是上下级关...
六 设计模式之代理模式(或称委托模式)
<br />定义   为其它对象提供一种代理以控制对这个对象的访问<br />类图<br /><br /><br /><br /><br /><br />通用代码 抽象主题类 public interface Subject { public void request(); } 真实主题类 public class RealSubject implements Subject { @Override public void request() { //具体业务处理 } } 代
设计模式——委托模式
委托模式同样是设计模式的一种。 委托模式:两个对象之间,不能直接联系,需要通过一个第三方的对象,帮助它们联系,叫委托模式。 借用买卖二手房的例子: 在使用委托模式时,我们需要使用协议。协议就是一套标准,在标准里面声明了很多方法,但却不管方法是怎么实现的。通常方法的实现都在受委托类(中介)中实现。而最后通过委托类(业主)调用。当然具体情况具体分析,这里只是一个简单的例子。 1.创建一个协议
设计模式(二):代理模式(委托模式)
代理模式 组成: 抽象角色:通过接口或者抽象类声明真实角色实现的业务方法 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所需要实现的业务逻辑,供代理角色调用 代理的基本作用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protoco...
Delegate Pattern(委托模式)的 例子,Java代理设计模式的用法和理解
Delegate Method (委托函数):是一种结合接口、多态、封装等特性的用于代理(委托)模式设计的一种函数。 委托模式:在软件工程中,委托模式是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。 详见维基-https://en.wikipedia.org/wiki/Delegation_pattern 作用:为其他对象提供一种类似代理的方式以控制对这个对象的访问。 例子...
[设计模式](六):装饰器模式(Decorator)和代理模式(Proxy)|委托模式(Delegater )
[设计模式](六):装饰器模式(Decorator)和代理模式(Proxy)|委托模式(Delegater )
PHP设计模式之委托模式(Delegation)了解下
这个委托模式呢,就是通过分配或委托其他对象,它能够去除核心对象中的判决和复杂的功能性。来看一个经典的应用场景: 设计了一个cd类,类中有mp3播放模式,和mp4播放模式 改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式 改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。 来看下未改进之前的cd类,这时候选择播放模式是一种...
Swift 委托/代理设计模式
Swift 中的委托/代理模式(一下简称"代理模式")基本一致。 代理设计模式的基本思想就是将我(类或者结构体等)需要来完成的工作交给(委托给)另一个有我所规定的做这项工作能力的人(符合要求类型的对象等)来处理。 代理模式的实现需借助于我们上一篇文章所讲的协议。我们定义一个协议来封装那些指定的方法(做这项工作的能力),使实现这些协议的类等拥有这些方法,我们就可以将工作委托给他来处理。 举个实
请问大神们指点一下关于C++代理(委托)设计模式的问题
static void function()nn printf("this is a function\n");nnnclass Funnnpublic:n virtual void func() = 0;n;nnclass RealFun : public Funnnpublic:n void func()n n function();n n;nnclass DelegateFun :public Funnnpublic:n RealFun *realFun;n DelegateFun()n n realFun = new RealFun;n n void func()n n realFun->func();n printf("this is a delegate\n");n n;nnint _tmain(int argc, _TCHAR* argv[])nn DelegateFun delegateFun;n delegateFun.func();n getchar();n return 0;nn我想问一下我这个简单的例子算不算代理设计模式,这样是不是绑定了全局函数
C++设计模式 ==> 代理模式
简介 代理模式,顾名思义,就是让一个代理替代真实事物做事情,切结果是是等效的,就相当于现实世界中的中介。在设计模式中,代理模式需要一个代理类来实例化真实事物类的对象,然后可以创建代理对象代替真实对象处理一些事情。代理模式可以起到隔离真实事物类的作用,在网络通信等后面有诸多应用。 下面我们使用一个简单的代码样例来演示一下代理模式的工作过程:假设有一位小A(RealPersuitePeople类)...
系统架构设计——设计模式之代理模式(一)
在纷繁复杂的程序设计世界里,我们总是需要尽可能的考虑到各种情况。而有这么一种机制,我们可以将我们指责中的一部分隔离开来,让一个所谓的代理来帮我们解决一部分和主体业务关系不大的业务,从而让我们能更专心的设计我们的主体业务。这就是代理模式的初衷,也是很多流行框架的应用。——个人理解。 一、代理模式(Proxy)的定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不合适或者不能
设计模式 代理模式和装饰模式的区别
网上各种类图,UML学的不好看着实在累。所以,理论学的不进去了,咱们抛开ta聊下区别,希望最后有助于理解理论。 代理模式: 代如其名,生活中办事如果遇到代理或者中介,中间被坑了多少,用户是肯定不清楚的。 举个例子,卖车的中介可以在交易前请交易人吃饭,事后可以拿回扣,甚至可以偷偷卖给其他人,这些对于用户来说都是透明的。用户只是找了个中介,要卖车,谈好价格然后拿钱。中介做了...
C#设计模式之代理模式
转:http://blog.csdn.net/lovelion/article/details/8227953
Java为何采用双亲(父类)委派模型(也叫用代理模式加载相关的类)
1.首先需要了解什么叫双亲(父类)委派模型?           java中存在3种类型的类加载器:引导类加载器,扩展类加载器和系统类加载器。三者是的关系是:引导类加载器是扩展类加载器的父类,扩展类加载器是系统类加载器的父类。         双亲(父类)委派模型: 某加载器   每次准备 加载类 的时候,都会先尝试委托 其 父类 加载器进行加载该类。 2.动机?     2.1
代理通信设计模式 - 代理模式、桥接模式、中介者模式
看了c嵌入式编程设计模式一书,对代理模式、中介者模式、观察者模式概念模糊。赶紧度娘,看到有位前辈自己总结了,摘抄过来以备学习之用。查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!    相似点    开始的时候,这三个模式在名字上的意思有相似的地方,在现实生活中,如房屋中介、买房人、卖房人,房屋中介当然是一个中介,因为它担任买房人和卖房人之...
OC-中介找房-代理设计模式
定义一个Children类和一个Nurse类,并实例化一个保姆对象和孩子对象。当孩子哭的时候,告诉保姆“我需要你陪我玩”,当孩子e
C#委托与代理模式
在设计模式的学习过程中,委托是一个不容易理解的知识点。尤其是在学完代理模式之后,就更不知道什么是什么了。下面分别看一下各自的实例,来看一下这两者有什么区别。       委托是一种引用方法的类型。一旦为委托分配了方法,委托将于该方法具有完全相同的行为。委托的方法的使用可以向其他任何方法一样,具有参数和返回值。       委托可以是对函数的抽象,即为函数的“类”,委托的实例对象将代表一
委托代理设计模式(协议)
(网摘) OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似 ); 数据源就是对象遵循了存储数据的协议,可以存储使用数据    协议表示了方法可以被任何类所实现。协议本身不是类。他们只是简单定义了一个其他对象可以实现的接口。当你的类实现了协议中的某个方法的时候也就是说你的类实现了那个协议。
用PHP的反射实现委托模式
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。 动态委托的介绍:动态委托概念来自于Jakarta 字节码工程库 (Byte-Code Engineering Library, BCEL)。它能够分析存在的类
PyQt5使用记录之三 —— MVD模式中的委托定义与使用
    在上篇 PyQt5使用记录之二 —— QTableView实现数据的显示、编辑、删除与添加 中使用了QTableView与QStandardTableModel结合,实现了数据的CRUD,但数据的显示与编辑界面都是使用默认的委托来实现的,本篇记录下,结合自定义委托,实现自定义数据的显示与编辑。    使用自定义委托,一般自定义一个继承自PyQt5.QtWidgets.QStyledItem...
android深入之设计模式(一)委托模式
委托模式是基本的设计模式之一。委托,即是让另一个对象帮你做事情。 许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。 委托模式使得我们可以用聚合来替代继承。
委托代理理论
一,现代企业理论的框架 在阿罗一德布鲁世界里,厂商被看成是一个"黑匣子",它吸收各种要素投入,并在预算约束下采取利润最大化行为.这种"人格化"的厂商观过于简单,它忽略了企业内部的信息不对称和激励问题,无法解释现代企业的很多行为.于是从20世纪印年代末70年代初开始,一批经济学家从这两方面人手,深入到企业内部的关系中,也就是说深入到"黑匣子"里面研究企业中的组织结构问题,期望得到关于企业这种经济组织
golang设计模式(7)代理模式
golang代理模式
Golang设计模式之代理模式
1. 概述代理模式,简单来说就是提供一个对象来控制其他对象的功能。在一些情况下,一个Object不适合直接引用目标对象,但可以通过代理对象调用目标对象,起到中介代理的作用。相关源代码demo在Github上,可供参考!2. 实现示例那个简单的例子,中介代理各业主的房子。每个业主都有个卖房的函数。中介代理的相关实现如下://被代理的公共函数 // type ProxyFuncs interface {
理解object-c委托和协议
以下是复制别人的,看着不粗 今天看到一个哥们总结 delegate 和 protocol关系用了这样的一个比喻,觉得很贴切,拿来给大家分享一下:       把自己不想干的一些事情(洗衣做饭)找个助手来帮助你做,而你要的这个助手得有一定的能力,不是任何一个人都可以的,所以你就得有个招聘要求。好了,协议(protocol)就类似于你的招聘要求,你找到的助手就是代理(delegate)。
java中的委托模式
转自:http://blog.sina.com.cn/s/blog_5f13e9910100g3ob.html 委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们...
C++委托实现(函数指针,function+bind,委托模式)
这一段在公司的某个框架代码中看到了函数指针的使用。风格比较偏纯C,其实C++有更加合适的解决方案,在这里总结一下。   首先从函数指针说起。      一、函数指针   从定义上讲,函数指针指向的是函数而非对象,函数指针指向某种特定类型。其类型由函数的返回类型和形参类型决定。   声明方式如下:bool (*pf)(const string &,const string &);  注意pf
3、设计模式—单例、工厂、代理、适配器、观察者
 1、  设计模式——单例模式 单例模式负责创建自己的对象,同时确保只有一个对象被创建。比如,我们要统计网站的访问用户数,在任何时候都只有一个对象在记录用户数,否则就可能出现重复写入的问题,这是单例模式应用的一个场景实现如下class Person{    //私有构造函数,组织对象实例化,从而阻止创建多个对象    private Person(){}    //私有对象变量    privat...
观察者设计模式 Vs 事件委托(java)
观察者设计模式 Vs 事件委托标签: 设计模式 java 事件的委托本篇博客主要讲解一下几个问题 什么是观察者模式 观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察者能够回调自身的方法去更新自己观察者模式的类UML图实现步骤 要定义一个观察者接口 观察者实现观察者接口 要
设计模式--委托模式 C++实现
原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html 【委托模式 C++实现】 我对.Net的委托模型印象很深刻,使用委托,可以快速实现观察者模式,免去写很多繁杂重复的代码。遗憾的是,C++并没有提供这样的模型,为了达到相似的目的,需要继承一个类并重写virtual方法,这种做法需要写很多代码,
设计模式(14):结构型-代理模式(Proxy)
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 设计模式分为三种类型,共23种。 创建型模式(5):单例模式、抽象工厂模式、建造者模式...
python委托模式详细解释
收集了网上的三个例子,然后做了些注释: #!/usr/bin/env python3 # -*- coding: utf-8 -*- class Wrapper: def __init__(self, obj): self.wrapper = obj print self.wrapper print type(self.wrappe
设计模式面试必考点之代理模式
如何回答什么是代理模式?在代理模式(Proxy Pattern)中,我们创建具有现有对象的对象,以便向外界提供功能接口。那什么是代理呢?假设我们想请明星来学校唱歌,我们不可能联系明星本人,他太忙了,我们会联系他的经纪人,然后明星来唱歌。这其中经纪人就是代理。为什么要使用代理模式?优缺点?使用场景?使用目的:解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对...
代理模式和回调
java实现回调和代理模式
Unity3D 利用C#实现简单的代理模式Delegate(委托)
Ref: http://www.cnblogs.com/shadow7/p/5892641.html 1、Delegate是什么? Delegate中文翻译为“委托”。 C#语言是支持代理的,并且代理是非常的好用的一种方式。简单的来说就是你委托别人帮你做一件事情,当委托人做完你委托的事情之后会告诉你他做完了。C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用
Java动态代理(代理模式/委托模式)
Java动态代理(代理模式/委托模式)1、代理的定义为其他对象提供一种代理以控制对这个对象的访问。2、代理的使用场景在某些情况下,我们不希望或是不能直接访问对象 A,而是通过访问一个中介对象 B,由 B 去访问 A 达成目的,这种方式我们就称为代理。这里对象 A 所属类我们称为委托类,也称为被代理类,对象 B 所属类称为代理类。代理优点有: 隐藏委托类的实现 解耦,不改变委托类代码情况下做一些额外处
C#的事件(Event)和代理/委托(Delegate)例子
代理和委托的用法例子
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java大神班 大数据大神班