Proxy - 什么代码(以及在哪里)将 ProxyService 转换为 RealService 调用?为什么/何时使用这个? 层 - 如何实现? 纪念品 - 为什么不将状态持久保存到缓存或文件中?
我对 Proxy 模式的理解是,您拥有某种具有 ProxyService
和 RealService
的 Service
接口(interface)> 结石。出于某种原因,您无法访问 RealService
,因此您针对 ProxyService
实例进行编码,然后让框架将代理链接到服务的真实实例。只有两个问题:
- 我想不出一个例子,我可以访问
Service
和ProxyService
,但不能访问RealService
- 有人可以提供关于何时可能发生的示例?
这与 Memento 模式有何不同?我对 Memento 定义的理解是,它用于保存对象状态,这就是 Proxy 真正在做的事情,是吗?如果不是,请解释 Memento 与 Proxy 有何不同!提前致谢!
最佳答案
首先,我要声明我的回答是,我不相信关于模式有任何硬性规定 - 您可以从中获取所需的内容,仅此而已。我使用某些模式的方式无疑不同于其他开发人员可能选择使用它们的方式。也就是说,这是我对你的问题的看法。
代理模式解释
据我了解 Proxy
设计模式,您可以使用它来做两件事:
- 限制对特定对象实例的其他公共(public)方法的访问
- 通过在第一次调用代理时实例化具体对象,然后将对代理的所有进一步调用传递给您的代理创建的具体实例,来避免昂贵和不必要的实例化成本。
也许 RealService
有一个您想要隐藏的方法 doSomethingReallyDangerous()
。或者更无伤大雅,也许 RealService
有数百个方法,您不需要在每次键入 .
后都看到这些方法 RealService
实例的变量名。您将为此使用代理。
为了进一步阅读,这篇文章有很多有用的信息:
http://sourcemaking.com/design_patterns/proxy
与纪念品模式的区别
Memento
模式允许您通过将中间状态与具体对象一起存储来将对象回滚到其原始状态或某个先前状态。有点像编程的“撤消”。您可能会使用 Proxy
模式来实现 Memento
,但是 Proxy
不保证保存对象状态或回滚 - 它只是让您如果再次实例化该对象的成本过高,则引用同一对象进行方法调用。
希望这能有所帮助 - 我喜欢将 Memento
视为功能更全面的 Proxy
版本,但不是所有 Proxy
实现是纪念品
。
关于java - 代理和纪念品模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404327/