问题标签 [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 投票
13 回答
82607 浏览

design-patterns - 代理、装饰器、适配器和桥接模式有何不同?

我在看代理模式,对我来说,它看起来很像装饰器、适配器和桥接模式。我是不是误会了什么?有什么不同?为什么我要使用代理模式而不是其他模式?您过去是如何在现实世界的项目中使用它们的?

0 投票
9 回答
122976 浏览

optimization - 什么是写时复制?

我想知道什么是写时复制以及它的用途。Sun JDK 教程中多次提到该术语。

0 投票
3 回答
6982 浏览

design-patterns - 如何使用代理模式来替换单例?

这是对一些关于单身人士如此糟糕的评论的回应

有人建议可以使用代理模式而不是单例来缓存数据库数据。但是我看不到优势,实际上单例似乎更“可控”。

让我详细说明这个问题。假设您有一个数据库,其中包含大量数据,并且永远不会更改,因此可以将其视为只读,为什么代理模式比单例模式更好地建模此数据缓存?

(PS:如果您要说“因为它更'可测试'!” - 请详细说明,我仍然习惯这些概念)

谢谢你的帮助!

0 投票
2 回答
68 浏览

java - 构建远程代理时,Java 中的适当术语是什么?

假设我正在用 Java 为可能驻留在远程服务器上但可能驻留在本地的对象实现远程代理。

远程服务器上有我的真实对象,有本地实现(代理本身),还有我提供给我的程序的接口,它隐藏了对象实际位置的详细信息。本地表示可以联系对象的本地或远程实现。

Java中这些东西的标准术语是什么?我应该如何命名我的接口/类?

我已经看到了主题、图像和实现这些术语(可能从 GOF 时代开始),但我想知道为用 Java 编写的框架命名的可接受方法是什么。

0 投票
2 回答
696 浏览

javascript - JS 代理模式

我使用此代码来覆盖 window.alert 函数。该函数将中断替换为 \r\n。它在 Firefox 中运行良好,但在 IE 中当然不行。我收到错误消息:不支持属性或方法。

请帮我找到解决方案!谢谢

0 投票
2 回答
1888 浏览

design-patterns - 如何动态实现代理模式?

我正在重新审视我去年写的课程跟踪(肮脏的逻辑)。目前我有一个处理所有状态跟踪的超级基类,但是我需要跟踪的每个属性的值都需要坚持标准get { return _x; } set { _isDirty = true; _x = value; }的工作方式。

在玩过 Entity Framework 并阅读了Proxy Pattern之后,我希望有更好的方法来实现我的 IsDIrty 逻辑,同时能够利用自动实现的属性?

老实说,我不知道我在说什么。有没有办法我可以执行以下操作:

然后实现一个动态代理,它将使用反射(或另一个神奇的解决方案)首先调用另一个方法,然后再使用属性设置属性的值TrackState

显然,我可以通过创建一个物理代理类并使用 IoC 轻松地做到这一点:

但我不想为每个对象都这样做,否则我现有的解决方案没有任何好处。希望有人能满足我的好奇心,或者至少告诉我 EF 是如何实现的。

0 投票
2 回答
6122 浏览

.net - 代理模式和适配器模式的区别?

代理模式和适配器模式之间似乎有相似之处?

谁能解释一下有什么区别?为什么我们需要他们两个?在哪些问题中我们应该只使用代理而不是.net 示例中的另一个?

谢谢

0 投票
5 回答
266 浏览

c# - 这里的 new() 函数是什么?

我一直在学习设计模式,并且从一个类中看到了这样的方法调用:

如您所见,那里有一个subject = new();电话,我想知道它是在创建一个新实例Proxy还是其他东西。我没有找到与此相关的任何内容。

非常感谢您的帮助。

如果需要,我可以粘贴整个代码,或者实际上它是写在一本书上的,所以我需要在这里写下来。

谢谢。

0 投票
2 回答
874 浏览

ruby - Ruby:代理模式,减少方法调用

如何代理 ruby​​ 记录器并保持性能?

所以,我们在工作中有一个要求,很合理。当程序被发送信号 HUP 时,日志被刷新并重新启动。

问题是,如果 context.logger 被重置,那么 @logger 仍然指向旧的。

所以,我想我会代理记录器:

这很好用,除了我将一个方法调用换成 2 个方法调用(1 个访问器;它返回记录器)。我仍然需要调用 LoggerProxy.:debug, :info, ...,然后调用原始记录器!因此,有 2 个方法调用,其中有一个。

我不想对 Logger 类进行猴子或重载它,因为我想在将来使用其他记录器、syslog、滚动我自己的或类似的。

有没有办法减少方法调用的数量以提高性能?

-丹尼尔

更新:为了回答有关性能的问题,这里是示例测试。

0 投票
2 回答
1135 浏览

php - 根据需要实例化定义为 PHP 类中的属性的对象(延迟加载)

为简单起见,假设我有 2 个类,User 和 UserStatus,用于 Web 应用程序。

在大多数 HTTP 请求中,不会使用状态对象,因此我正在寻找一种仅根据需要实例化它的方法(称为延迟加载)。我应该如何拦截status->method()呼叫并即时创建该对象?

一个重要的注意事项是我需要$user_id在 UserStatus 类中可用,否则该fetchDataFromDB()方法将不知道它应该向哪个用户获取数据。这应该怎么做?

我看过一些关于这个问题的有趣的东西,比如 Fabien Potencier 的什么是依赖注入?Pimple - 一个 PHP 5.3 依赖注入容器以及一些关于代理模式的文章,但要实现它们,看起来我必须对当前代码进行很多处理。有没有更简单的方法?