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

时间:2016-04-08 14:55:55

标签: java design-patterns proxy-pattern

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

例如,

function: 0xsomeaddress nil

用户可以直接创建//TwitterService service = (TwitterService) SecurityProxy.newInstance(new TwitterStub()); TwitterService service = new TwitterStub(); System.out.println(service.getTimelinePosts("abc")); 的实例并访问这些方法。我想知道是否有办法不通过客户暴露或避免建造具体课程?

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

正如GoF所说,代理模式的意图是“为另一个对象提供代理或占位符来控制对它的访问”。

因此,在您的具体情况下,您将直接创建特定的代理实例。只要您(作为客户端)知道您需要特定类型的代理对象,那就没问题。

如果您想要的是间接级别,则可以使用返回不同类型的代理对象的抽象工厂模式。但到目前为止,代理对象的原因是代表其他对象行事。

作为旁注,当您拥有创建成本高昂的对象时,代理非常有用,但您不希望因此类费用而削弱主要应用程序功能。例如,假设您有一个包含1000张图像的文档。您可以为它们使用代理,并且只在严格需要时(即当它们处于可见视图时)加载它们,并且您仍然可以非常快速地加载完整文档而无需一次读取1000个图像的开销。