这两组内容没有联系,只是今天在路上的时候突然一下子想到了,就放在一起说说吧
Facade与proxy大多数人应该很熟悉,也接触了不少,但是放在一起比较问他们有什么具体区别的时候好像一下子也说得很含糊。
Facade 意为门面,proxy意为代理,中文的解释也很通俗,但是有时候感觉Facade也有代理的味道,有人认为二者都属于proxy这个大概念,但是问题是他们总得有不同的用途吧,否则发明这两个词岂不是浪费?
google了一些说法,下面这个说法比较到位:
Facade: 用于
隐藏调用的复杂性
proxy: 放在服务期端
保护被访问的对象
我个人的理解是:
对于客户端调用来说,Facade是一定可见的,proxy是不可见的 .
比如,一个报刊亭卖报纸,可能有人民日报,新华日报等多家送报纸给他们的人,但是我们直接到他的店面就可以取到我们想要的报纸,而不是买人民日报的时候到人民日报社去取,以此类推.
而proxy对我们是隐藏的,比如Jive论坛里的权限验证,我们发帖子的时候客户端是透明访问的,压根实际在服务端后台作了isAdmin和isGuest的判断
Facade仅仅是提供了你一个方便的 "门面",你可以把它理解为超市,你只要到他那里就可以取到你想要的东西,但是他所调用的后台仍然可以根据策略开放给客户端,比如我们完全可以不去报刊亭买报纸,我们自己去人民日报社去取,但是这种做法显然在如今的现代化潮流下是没什么提倡的,现在更提倡分工.
对于proxy我们仍有一个误解,比如问你"中介公司是proxy吗?" 请思考一下
很多人认为中介公司是代理,因为我们生活中有时候就直接称中介公司为代理商或代理公司等,但是此代理非彼代理也! 为什么? 参照我们上面所说的proxy的特征,proxy是隐藏的,难道我们联系代理公司的地址时他会说 : "打一枪换一个地方" 么? 显然不是,恰恰相反,中介公司事实上反而是我们java里的Facade模式,因为它是可见的.
好,关于facade 与proxy就说到这里,应该很清楚了.
分享到:
相关推荐
2. **外观(Facade)**:是客户端与子系统之间的接口,它知道如何与所有子系统交互,并且提供了简单的接口供客户端调用。 3. **客户端(Client)**:通过调用外观对象的方法来请求服务,无须关心子系统的具体实现。 ...
2. **SubSystem Classes(子系统类)**:实现了Facade接口中定义的具体功能,它们是Facade与具体业务逻辑的桥梁。 Facade模式的优点: 1. **简单易用**:客户端只需要与Facade进行交互,减少了理解和处理复杂对象...
本文将深入探讨FACADE模式、Adapter模式以及Singleton和Proxy模式的基本概念、应用场景和关键要素。 首先,FACADE(外观)模式是一种接口型模式,它的主要作用是为复杂的子系统提供一个简单的接口,使得客户端无需...
4. **客户端与Facade交互**:客户端不再直接与子系统交互,而是通过Facade来完成操作。 **C++代码示例** ```cpp // 子系统接口 class SubSystemOne { public: void operationOne(); }; class SubSystemTwo { ...
eclipse工程文件 包含代码 有助理解 门面(Facade)模式 <br>外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 <br>医院的例子 <br>用一个例子进行说明,如果把医院...
综上所述,Laravel中的Symfony's Facade是实现高效开发的重要工具,它将Symfony组件与Laravel的优雅编程风格完美融合。通过理解和熟练使用Facade,开发者可以更好地利用这两个框架的优势,提升PHP应用程序的开发效率...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...
在基于在线式银行的应用中,Session Facade扮演着至关重要的角色,它充当客户端与服务器端EJB之间的单一接口,协调并封装复杂的业务逻辑。 在描述的场景中,一个servlet需要处理从一个账户向另一个账户转账的请求。...
其中,`Facade设计模式`(外观模式)是一种结构型设计模式,它通过提供一个统一的接口来隐藏系统的复杂性,并允许用户与系统交互更加简单。这种模式的主要目的是简化复杂的子系统,使客户端可以更容易地访问系统。 ...
3. **Client(客户端)**:客户端使用Facade对象来与子系统进行通信,无需直接与子系统中的多个对象交互。 在Java实现中,我们首先创建一个接口,这个接口代表Facade,例如: ```java public interface Facade { ...
在`Facade`中,有**外观类**(Facade Class),它是客户端与子系统之间的接口,只暴露必要的方法;**子系统类**(Subsystem Classes),它们是复杂的子系统,提供了丰富的功能,但被外观类隐藏。 以操作系统为例,...
在本文中,我们将深入探讨如何使用 Laravel 框架开发一个 API 代理,特别是基于 `thinkingmik/api-proxy-laravel` 的实现。`Laravel` 是一个流行的 PHP 框架,它为开发者提供了优雅的方式来构建 web 应用程序。API ...
**Ajax与Facade模式** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术允许我们创建交互性更强、响应更快的网页。它通过在后台与服务器进行少量数据交换,实现了页面的部分更新,而无需刷新整个页面。...
外观模式(Facade)是设计模式中的一种结构型模式,它为复杂的系统或子系统提供了一个统一的入口点,简化了客户端与系统之间的交互。通过外观模式,我们可以将系统的内部复杂性隐藏起来,使得用户只需要与一个简单的...
**包装器外观模式(Wrapper Facade Pattern)** 包装器外观模式是一种软件设计模式,它将一个复杂的组件或者一组组件的接口进行简化,提供一个统一的、更易用的访问方式。这种模式通常用于隐藏底层系统的复杂性,为...
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
"Laravel开发-laravel-route-proxy"是一个关于如何在Laravel项目中实现路由代理的专题,旨在帮助开发者高效地处理多路径批量呼叫的需求。 在Laravel中,路由定义通常位于`routes/web.php`或`routes/api.php`文件中...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架提供了一个统一的接口,例如Log4j、Java Util Logging (JUL)、Logback等。这个设计使得开发者可以在不修改代码的情况下更换底层...