Don't think you are, know you are

博客园 首页 新随笔 管理


先小结一下,对于更高层次的挖掘以后补充:

adapter, facade, proxy之所以要一起说,是因为他们都设计对另外一个对象的包装。实际情况中,到不用刻意去使用那种,因为这不是由使用者决定的,而是它们本身的适用场景和当时的上下文决定的。(后一句好像是废话,哪一种设计模式不是呢,与其说是我们选择了设计模式,倒不如说是需求和环境自己的选择)

下面说这3种模式,都是包装,差别究竟有何不同?

Adapter:  针对特定接口对现存类进行包装。
特点:   接口是定死的,意味着你要实现接口的所有功能 。
               现存类在这里是不可修改的。
               一般用于多态的场景,实现接口的子类包装另外一个对象。
关键词: 匹配


facade:  对一组相互协作的类或一个子系统包装成一个简化规范的接口。
特点:   接口不是固定的,是自己定义的,当然原则是应尽量简化
              把子系统要完全隐藏。使用它得人只能看到facade。
              目的在于,“编写一个新的类”的代价远远低于让所有的人都学会使用原有系统。
              典型的逻辑分离。让我们的注意力集中到我们需要化功夫处理的逻辑层而不被其他的逻辑层干扰。(究竟什么逻辑层呢,何以界定高低? 以后写,呵呵)
关键词:简化,分层

proxy:本来先不打算写它,但是facade的分层包装的说法让我想到还有一个proxy,他们区别在何处?
特点:  先说说几种常用的proxy
              远程proxy ,真正的对象在远程机器或远程的地址空间(Web Service ?)
              虚拟代理,真正的对象使用代价过高。比如需要权限验证,耗用资源,或者根本还未创建而现阶段需要使用的对象。
              保护代理,需要对真正的对象提供级别不同的访问
可以看出,这几种代理,简而言之将复杂的使用对象简化了。简化的不是接口方法,而是获取或使用对象的途径。
与facade的区别:facade一般代表一组对象或一个字系统
                              proxy代表单一对象
                              facade自定义接口,proxy 有与被代理对象相同接口
                               facade 简化接口
                                proxy 控制使用对象的使用级别或者使用成本(对于虚拟代理而言)。
关键词:代理

posted on 2007-07-08 16:14  炭炭  阅读(1104)  评论(0编辑  收藏  举报