问题标签 [proxy-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
165 浏览

java - 当我们可以推迟 RealClass 中昂贵的过程时,为什么还要使用代理模式呢?

我最近一直在阅读设计模式,关于代理模式有一些我不明白的地方。

书中引用:

  1. 虚拟代理按需创建昂贵的对象。Motivation 中描述的 ImageProxy 就是这种代理的一个示例。

我知道这种模式可用于按需创建昂贵的对象。这个例子也很好地说明了用法。

下面是代理类的构造函数RealImage。方法loadFromDisk()表示昂贵的过程。

而示例ProxyImage中的代理类正是它所要做的:按需创建昂贵的对象。

但我的问题是:为什么我们不能loadFromDisk()从构造函数中删除昂贵的方法并将其放在绝对需要的地方,

像这儿?

那么,为什么还要费心使用代理呢?

0 投票
2 回答
591 浏览

java - C++ 类中的内部代理实现

我正在调查 Dropbox 发布的跨平台库。以下java代码来自它。我想在我的 Visual c++ 中实现同样的东西;先看java代码

这个java代码调用了一些jni c++类(它与AsyncTask同名)。所以它在java类中实现c++代理来维护jni端c++对象。

但我想用 MFC c++ 语言而不是 java 语言(通常用于测试目的)来做,所以我从上层 java 代码实现了 c++ 类。但我发现 c++ 没有静态类定义。以下代码显示错误

那么我如何实现内部静态类,它是外部类的子类。

0 投票
2 回答
609 浏览

java - 如果在代理模式中我们有接口而不是代理类中的实际具体主题,它是否等同于装饰器模式

代理模式在进行一些额外的处理后将请求委托给真实主体,例如应用检查是否需要处理请求,可能是基于一些凭证检查。

它有如下的类图

在此处输入图像描述

代理类具有对具体主题的直接引用。

装饰器模式丰富了组件的行为[像代理一样,它也做了一些额外的处理并将操作委托给真正的组件]。该模式的类图类似于代理模式,唯一的区别是它引用了组件的接口。

在此处输入图像描述

在代理类中拥有具体的真实主题使得单元测试变得困难,因为类应该只依赖于接口而不是实现。我的问题是,如果代理模式也有对真实主体公开的接口的引用,那么它是否等同于装饰器模式。在这种情况下,代理模式的类图也将如下所示

在此处输入图像描述

0 投票
1 回答
234 浏览

java - 代理模式具体类隐藏实现细节

我一直在阅读有关 java 代理模式和调用处理程序的信息,并且到处都可以看到客户端可以使用具体的类构造。

例如,

用户可以直接创建实例TwitterStub并访问方法。我想知道是否有办法不暴露或避免通过客户端构建具体类?

有没有更好的办法 ?

0 投票
3 回答
399 浏览

scala - 使用功能回调/代理模式实现scala缓存

如何使用函数式编程实现缓存

几天前,我遇到了使用 scala 的回调和代理模式实现。如果值不在地图中,则此代码应仅应用内部函数。但是每次重新初始化地图并且值都消失了(这似乎很明显。

如何在不同的函数调用之间一次又一次地使用相同的缓存

0 投票
1 回答
1090 浏览

objective-c - 如何在 Objective-c 中实现代理模式(使用运行时和其他 objc 特性)

有时我需要在 ObjC中实现代理模式。如果我在运行时创建内部 主题并且不想将创建逻辑从代理中移出,我需要它。有时我在代理中使用几个对象,我也更喜欢使用 ARC 来内存管理。现在我使用 C++ 风格实现它:

我认为这不是最好的方法,我认为存在更简单的方法。我想使用 ObjC 运行时并自动转发消息。
如果不手动编写每个 set/get 方法,我怎么能做到这一点?

0 投票
3 回答
16346 浏览

oop - 适配器和代理模式之间的确切区别是什么?

据我了解,适配器代理模式都使两个不同/不同的类/对象相互兼容以进行通信。它们都是结构模式。我得到他们两个彼此非常相似。

有人能解释一下究竟是什么让它们不同吗?

编辑:我经历了这个问题。但我宁愿在适配器和代理之间进行仔细比较。

0 投票
1 回答
1697 浏览

c# - 装饰器模式和泛型

常规界面:

通用接口:

现在上课:

类 'ComputationCache' 是一个 'decorated' 计算:

为了初始化装饰计算,我尝试了以下操作:

...这给出了以下错误”:

无法将源类型“ComputationCache”转换为目标类型“T”。

有人可以评论是否更好地使用:

对比

0 投票
0 回答
270 浏览

c++ - 算术类型代理

背景

我正在研究 C++11 JSON 映射类,以引入语法直观且安全的对象,这些对象可以将自身序列化/反序列化为 JSON 表示。

问题

我需要为算术类型(主要是int, unsigned, float, double)提供一个好的代理。如何实施这样的事情?第一个想法是实现模板类重载所有算术、位和比较运算符。但是为了避免不必要的工作,我应该写什么超载?那么演员表操作员呢?返回类型应该是什么operator+

简单的不完整实现展示了这个想法:

选择

但是我应该将原始 JSON 字段实现为代理类吗?也许有更好的方法。例如,我还考虑将内部值公开,所以不要写:

json.intField += 4;

用户必须写

json.intField.value += 4;

这种语法不像我希望的那样直观和清晰,但这也是一种选择。

对于每个告诉我如何在 C++ 中实现 JSON 的人——这不是我的问题!代理模式有更广泛的用途!

0 投票
1 回答
242 浏览

c++ - 右值中的代理类 - 如何实现赋值运算符?

假设我有一个简单的向量类,其中元素通过代理类访问。

向量类:

代理类:

如何将向量(或者更确切地说,代理)中的元素分配给 double 类型的变量?换句话说,我如何完成以下任务:

不幸的是,我不能写这样的东西:

因为operator=必须是会员。