我对代理模式和外观模式区别的看法

本文探讨了GOF设计模式中的代理模式和外观模式。代理模式主要用于控制对象的访问,如在对象需要时才创建,以提升性能,客户端可能并不知道实际的对象是否已创建。而外观模式提供了一个简单的接口来访问复杂的子系统,确保了客户端调用时系统会执行实际功能。两种模式在类继承结构上也有所不同,代理模式中代理类与原始类通常继承自同一抽象类,而外观模式是一个独立类,聚合了多个子系统的对象。
摘要由CSDN通过智能技术生成

GOF的设计模式中的Proxy和Facade都是给客户端提供一个对象,客户端只需要访问这个对象就能达到使用系统中的各种功能的目的。这两个模式功能一样,为什么要区分成两种模式呢?

翻书后我从原文(中文)找到了它们的差别。

原文对Proxy的介绍是:

对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。我们考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形对象( 如大型光栅图像) 的创建开销很大。但是打开文档必须很迅速, 因此我们在打开文档时应避免一次性创建所有开销很大的对象。因为并非所有这些对象在文档中都同时可见, 所以也没有必要同时创建这些对象。这一限制条件意味着, 对于每一个开销很大的对象, 应该根据需要进行创建, 当一个图像变为可见时会产生这样的需要。但是在文档中我们用什么来代替这个图像呢? 我们又如何才能隐藏根据需要创建图像这一事实, 从而不会使得编辑器的实现复杂化呢? 例如, 这种优化不应影响绘制和格式化的代码。问题的解决方案是使用另一个对象, 即图像Proxy , 替代那个真正的图像。Proxy 可以代替一个图像对象, 并且在需要时负责实例化这个图像对象。

也就是说,Proxy可以提供更好的性能,代价是客户端调用Proxy的时候其实Proxy背后的系统可能并没有真的初始化好了。

Facade在原文中的介绍是:

当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性, 也更容易对子系统进行定制, 但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade 可以提供一个简单的缺省视图&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值