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

c# - 了解 C# 中的代理模式

假设如果我试图通过像这样的其他类访问一个类的方法

这被称为代理类吗?或者它是否需要有一个接口作为参考然后我们必须调用该方法?例如像这样

0 投票
1 回答
50 浏览

c++ - 代理是否适合创建演示模式?

很多时候,我们需要在某些项目中使用演示模式,这通常涉及硬件,目的是软件可以在没有实际连接硬件的情况下运行/模拟。演示模式中的功能在一定程度上模拟了硬件,但显然不对其进行操作。

我的问题是,代理设计模式(或任何其他设计模式)是否适合在软件中创建演示模式?

考虑下面简化为简短的示例。

在上面的代码中,我为机器人创建了一个演示手臂和一个真实手臂,只是为了展示它们的工作原理。显然在真实演示模式下,所有派生对象都会有演示实现。这是在软件中实现演示模式的好方法吗?

这可以应用于真正的大/中型应用吗?我倾向于喜欢这种方法,因为在真实和演示应用程序中调用完全相同的函数,这使生活更轻松并理解流程。或者,一个单独的“演示”路径几乎可以变成一个单独的应用程序/模块,它会分开并失去与实际应用程序的密切相似性。

0 投票
1 回答
182 浏览

scala - Scala 调用处理程序导致 ClassCastException

我正在尝试实现一个代理模式,以便我可以在必要时动态交换底层实例以及触发交换的扩展方法。我以前在 Java 中实现过这个,但我在 Scala 中遇到了麻烦。

这是我的场景:

现在的问题是:当我从 Proxy 对象上的 DynamicClient 或 Object 调用方法时,它们工作得很好。

对属于 Client 类的方法的任何调用在到达调用处理程序之前都会失败。

使用此异常跟踪:

为什么我会得到这个演员表异常?有没有更好的方法来处理 Scala 中的代理调用处理与 Java 方式?

0 投票
1 回答
1055 浏览

c# - 具有内部两个服务和依赖注入的外观 - 设计模式方法

我想创建 Facade 类来处理对两个服务的少量操作。为了联系这些服务,我有代理类。

每个服务都有抽象代理和派生代理 - 我如何创建这部分架构,以避免在 Facade 中解析?

我应该使用什么设计模式来解决这种情况?

编辑

(可选)我应该使用这个解决方案,但仍然不太喜欢它

0 投票
2 回答
858 浏览

javascript - 同一目标的多个代理对象的表观污染

我正在尝试为 JavaScript 中的同一目标对象创建多个代理包装器,每个单独的包装器具有稍微不同的属性,这些属性会影响包装功能的运行方式。这些属性分配给和处理程序receiver中的对象并从其访问。但是,当我检查生成的代理时,它们都具有我期望已分配给最后创建的代理的属性集。setget

我的预期结果:[{name: 'one'}, {name: 'two'}]

实际结果:[{name: 'two'}, {name: 'two'}]。尽管它们看起来相同,但它们并不严格相等。

如果我省略const obj并创建我的对象,new Proxy({}, ...)我会得到预期的结果——一个 proxyone和一个 proxy two,大概是因为目标引用不在它们之间共享。那么:到底是什么?据我了解,使用receiverto storename应该可以防止它被传播到目标对象,但它似乎还是这样做了。

0 投票
0 回答
560 浏览

typescript - 用于代理的 TypeScript 映射类型

我想实现一个概念上简单的事情:将返回的函数映射any(或者,为了示例,number)转换为返回的函数映射void,同时保留其他类型信息。

用代码表示,我想做这样的事情:

0 投票
1 回答
207 浏览

c++ - 代理类构造函数访问

我开始的一个 c++ 项目遇到了一些麻烦。我正在尝试实现基本链表,并且我的尝试在列表类中包含代理类以表示单个节点。其中一个列表构造函数可以获得单个参数并用它初始化列表的第一个节点,但我不能将该参数传递给代理类的构造函数。有什么建议怎么做吗?

这是一些c++代码

0 投票
1 回答
2096 浏览

python - Python 代理类

我正在尝试为另一个类创建一个代理类。我希望将此类传递到其构造函数中的代理中,然后让代理在其自身上动态创建此类的所有相同方法。

这是我到目前为止没有工作的内容:

我认为这是self.__dict__[funcName] = fn需要更改的线路,但不确定要更改什么?

我是 Python 新手,所以如果有完全不同的 Pythonic 方式来做这件事,我也会很高兴听到这个消息。

0 投票
1 回答
802 浏览

javascript - 如何为 sessionStorage 之类的东西编写合适的 ES6 包装器

您好,我想知道如何为类似sessionStorage.

我可以通过对sessionStorage. 例如一些快速的伪代码:

我会这样使用它:

一切都很好,但我希望用户可以自由地在我的代理上使用其他本机sessionStorage方法,我可能不会在我的代理中实现自己。

因为sessionStorage即使他们可能做的只是在sessionStorage没有任何干预的情况下代理,也可以自己编写所有类似的东西。

对于更大的东西,我只会操纵 20 种方法中的 5 种方法,或者这似乎不可行。

用原型覆盖本机功能似乎也是导致许多wtfs-per-minute.

到目前为止,我从 Javascript 中的“代理模式”中读到的内容都实现了原始对象中的所有方法。我是被迫这样做的吗?

是否有某种方法可以创建一个 ES6 类并将该类的原型设置为构造函数中的 sessionStorage 或其他东西?

0 投票
0 回答
81 浏览

python - 是否可以在 __getattr__ 中确定是否访问了属性或方法?

我知道方法只是可以通过getattr(obj, 'method_name'). 是方法不存在,这个会触发obj.__getattr__(method_name)。但是,在__getattr__实现中是否可以区分该属性是否由用户直接调用?在我看来,描述符可能允许这样做,但我并不完全确定。

我的动机是一个代理类,它将属性访问和方法调用都转发到通信缓慢的包装对象。对于属性访问,我们必须阻塞并等待结果。但是对于方法访问,我想注入一个_blocking允许接收非阻塞承诺对象的参数: