问题标签 [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 回答
1917 浏览

dependency-injection - JAVA EE 代理模式

我一直在读到,当您要求将依赖项注入到 bean 中时,您会被注入到该资源实例的代理。我相信我知道代理是什么,它是一个知道如何将消息转发到另一个实例的实例。它还指出,正是这种模式允许容器为这个托管 bean 提供服务。

我不太明白这一点。为什么需要代理?这是如何实现的?每个bean都有一个代理对象吗?还是我有很多代理转发到一个实例?或者两者都不是?

此外,从 GoF 的书籍设计模式中,我读到您必须提供一个充当占位符的代理类。但是我在 Java EE 中从来没有这样做过,应用程序服务器会在运行时创建代理类吗?

0 投票
2 回答
367 浏览

c++ - 具有代理设计模式的预处理器

在代理部分,四人组的设计模式说:

重载成员访问运算符并不是每种代理的好解决方案。一些代理需要准确地知道调用了哪个操作,而重载成员访问运算符在这些情况下不起作用。

[...]

在这种情况下,我们必须手动实现将请求转发给主体的每个代理操作。

[...]

通常,在将请求转发给主体之前,所有操作都会验证请求是否合法、原始对象是否存在等。一遍又一遍地编写这段代码很乏味。所以通常使用预处理器来自动生成它。

好的,哪个预处理器以及如何在 C++ 中使用?

0 投票
3 回答
813 浏览

java - 为什么代理模式这么慢?

至少在java中,代理模式有很多开销——我不记得确切的数字,但是当包装微小的方法时,代理需要的时间大约是包装方法的50倍。例如,这就是为什么java.awt.image.BufferedImage.setRGB&getRGB真的慢;大约有三个代理包装实际的byte[].

为什么是50次?!为什么代理不只是加倍时间?


编辑:=(

对于 SO 来说,这似乎很常见,我得到了一堆答案,告诉我我的问题是错误的。它不是。查看 BufferedImage 或其他一些真正的代理模式,而不是那些微基准。事实上,如果您必须对 BufferedImage 进行大量像素操作并且您知道它的结构,那么您可以通过手动撤消代理来实现上述巨大的加速;看到这个答案

哦,这是我 50 倍的来源。正如文章所详述的那样,代理在包装需要很长时间时不会受到明显的惩罚,如果您包装一个小方法,它们确实会产生重大的痛苦开销。

0 投票
4 回答
368 浏览

c++ - 可定制字符串过滤器的设计

假设我有大量的文件名my_dir/my_subdir,以某种方式格式化:

例如data11_7TeVdata_type00179691运行号、NTUP_PHOTON数据格式。

我想写一个接口来做这样的事情:

我想要懒惰的行为,例如在像countor之类的任何操作之前不必进行真正的过滤get_list。如果已经完成,我不想重做过滤。我只是在学习一些关于设计模式的东西,我想我可以使用:

  • AbstractFilter实现filter*方法的抽象基类
  • 工厂从被调用的方法中决定使用哪个装饰
  • 每次我调用filter* 方法时,我都会返回一个装饰类,例如:


  • 构建正则表达式以过滤文件名的代理,但不进行过滤

我也在学习 jQuery,我正在使用类似的链接机制。

有人可以给我一些提示吗?有什么地方可以解释这样的设计吗?设计必须非常灵活,特别是要处理文件名中的新格式。

0 投票
2 回答
1328 浏览

design-patterns - 为什么是代理模式是结构模式,为什么是状态模式是行为模式?

为什么代理模式是结构模式,为什么状态模式是行为模式。确定新模式应被视为结构性还是行为性的标准是什么?

0 投票
3 回答
317 浏览

java - 这个图案叫什么名字?(答案:远程代理)

考虑一个OriginalClass在运行时可能可用或不可用的类。OriginalClass有一个方法doSomething,如果它的类可用,则应该执行该方法。

解决这个问题的一种方法是创建一个类,该类也有一个doSomething调用OriginalClass.doSomethingusing 反射的方法。像这样的东西:

这里应用的设计模式的名称是什么?我怀疑它是AdapterBridgeFacadeProxy,但我不确定是哪个。

0 投票
3 回答
6213 浏览

design-patterns - 代理模式和虚拟代理模式的区别

直到现在我才知道代理模式,最近阅读了这篇文章,说虚拟代理基本上用于延迟内存密集型组件的对象创建过程,从而加快应用程序的速度。

但是在阅读了那篇文章之后,看起来代理模式和虚拟代理模式是一回事。我是对的还是我理解错了?

0 投票
1 回答
528 浏览

java - 如何实现涉及异步调用的代理模式?

如何实现涉及异步调用的代理模式?

举个例子,如果我想得到一些东西,我会首先检查对象是否驻留在内存中,如果不是,那么我会发出 http 请求来检索它(这是异步调用)。

在 CustomerDAO.getCustomerByName("John");

但是,由于它是异步的,因此会破坏程序的流程。getCustomers 中的任何局部变量也必须传递给回调函数。有什么建议用异步实现代理模式吗?谢谢。

0 投票
1 回答
450 浏览

c++ - C++中代理模式中的虚函数

如果我有一个代理模式 ClassA和代理是 Class PrxA。问题1

如果我定义了几个函数,那么virtual那些A应该被定义为virtualeven inPrxA吗?

现在如果

我相信代理类也应该继承。

现在假设这些代理类具有以下规则

  1. 在 c'tor 中实例化原始类
  2. 将在内部传递给通过不同内部类的任何引用/指针参数
  3. 要获取代理类的实际 impl(即APrxA我们有一个 impl 存储,它将为我们提供AfromPrxABfrom PrxB

现在有一个类C将 PrxA 作为其 c'tor 中的引用。

`C::C(PrxA& A): pa(A),a(getImpl(PrxA))

正在初始化的 C 类的本地成员。

如果我通过 A,它会很好用。这里没问题。

问题2 当我传递B给这个类C时,获得Bimpl 的最佳方法是什么(第二个在 C 的 c'tor 中初始化?(注意B派生自A

我可以考虑使用这样的getImpl(A)东西,但看起来不是一个好的解决方案。

如果我需要传递给以 PrxA 作为参考PrxB的类,我应该在这里采取什么方法?C除了铸造还有什么方法吗?

如果我们限制为一个构造函数,这里还有一件有趣的事情,我们可以获得 PrxA 或 PrxB 的引用,需要相应地处理这些引用以在初始化程序中获取 impl。我需要知道一个好的方法。

0 投票
2 回答
422 浏览

python - 使用 OOP 和代理模式构建字符串

我发现 SQLAlchemy 构造查询字符串的方式非常有趣,例如:

据我所见,那里应用了某种代理模式。在我的小项目中,我需要使用 OOP 方法进行类似的字符串构造。所以,我试图重构这种行为。

首先,某种对象,许多相似对象之一:

该对象的所有方法都返回self,因此我可以按任意顺序调用它们,并且次数不受限制。

其次,代理对象,如果它不是一个执行方法,它将调用主体的方法,它调用对象来查看结果字符串。

最后:

你对这个实现有什么看法?有没有更好的方法来制作所需数量的类,从而使这样的字符串具有相同的语法

PS:对不起我的英语,它不是我的主要语言。