zoukankan      html  css  js  c++  java
  • Facade与Proxy的区别

    key words:  门面与代理

    这两组内容没有联系,只是今天在路上的时候突然一下子想到了,就放在一起说说吧

    Facade与proxy大多数人应该很熟悉,也接触了不少,但是放在一起比较问他们有什么具体区别的时候好像一下子也说得很含糊。
    Facade 意为门面,proxy意为代理,中文的解释也很通俗,但是有时候感觉Facade也有代理的味道,有人认为二者都属于proxy这个大概念,但是问题是他们总得有不同的用途吧,否则发明这两个词岂不是浪费?

    google了一些说法,下面这个说法比较到位:

    Facade: 用于隐藏调用的复杂性
    proxy: 放在服务期端保护被访问的对象

    我个人的理解是:
    对于客户端调用来说,Facade是一定可见的,proxy是不可见的 .

        比如,一个报刊亭卖报纸,可能有人民日报,新华日报等多家送报纸给他们的人,但是我们直接到他的店面就可以取到我们想要的报纸,而不是买人民日报的时候到人民日报社去取,以此类推. 
        而proxy对我们是隐藏的,比如Jive论坛里的权限验证,我们发帖子的时候客户端是透明访问的,压根实际在服务端后台作了isAdmin和isGuest的判断

        Facade仅仅是提供了你一个方便的 "门面",你可以把它理解为超市,你只要到他那里就可以取到你想要的东西,但是他所调用的后台仍然可以根据策略开放给客户端,比如我们完全可以不去报刊亭买报纸,我们自己去人民日报社去取,但是这种做法显然在如今的现代化潮流下是没什么提倡的,现在更提倡分工.

        对于proxy我们仍有一个误解,比如问你"中介公司是proxy吗?" 请思考一下

        很多人认为中介公司是代理,因为我们生活中有时候就直接称中介公司为代理商或代理公司等,但是此代理非彼代理也!  为什么? 参照我们上面所说的proxy的特征,proxy是隐藏的,难道我们联系代理公司的地址时他会说 : "打一枪换一个地方" 么?  显然不是,恰恰相反,中介公司事实上反而是我们java里的Facade模式,因为它是可见的.

    好,关于facade 与proxy就说到这里,应该很清楚了.

  • 相关阅读:
    四则运算
    Git工具学习整理
    java拦截器中使用的动态代理
    Java动态代理
    Git常用命令
    Maven学习
    ruby调用jenkins API使用
    c#认证考试第四章(国庆作业及其总结)
    C#认证考试第三章
    c#认证考试练习题目
  • 原文地址:https://www.cnblogs.com/xinziyublog/p/4846583.html
Copyright © 2011-2022 走看看