zoukankan      html  css  js  c++  java
  • 设计模式——适配器、装饰者、外观和代理模式

    转载请注明:宋杰的站点 » 【原创】设计模式——适配器、装饰者、外观和代理模式

    适配器(Adapter)、装饰者(Decorator)、外观(Facade)和代理(Proxy)模式是四种常见的设计模式。但是在理解和运用的过程中却经常出现混淆。本文尝试区分一下这四种设计模式。

    先看一下四种设计模式的定义。

    定义

    适配器模式:包装另一个对象,并提供不同的接口

    外观模式:包装许多对象,以简化他们的接口。

    装饰者模式:包装另一个对象,并提供额外的行为

    代理模式:包装另一个对象,并控制对它的访问

    区别

    从它们的定义中可以总结出以下几点区别:

    1)适配器模式强调的是转换接口。举例:JDBC是java定义的数据库操作规范,其已经定义好了操作数据库的接口,假设一个数据库厂商提供了一套操作数据库的接口,但是该接口并不符合JDBC的规范,也就是说JDBC规范规定的接口和数据库厂商提供的接口不一致。这个时候就可以使用适配器模式将数据库厂商的接口转换成JDBC规范要求的接口。其他三种模式均不提供接口转换的功能。

    2)外观模式强调的是包装多个对象,以简化他们的接口。想象这样一种场景:你家的电器都是智能控制的,当你回家的时候你要打开空调、打开电视、打开热水器等等,这些都需要你自己一个个的去操作,这个时候你就会有这样一种需求,就是当你到家的时候只要进行一个操作,就能依次打开空调、电视、热水器等。这个时候就可以使用外观模式将空调、电视、热水器等的接口进行包装,只对外提供一个按钮。其他三种模式均强调的是对一个对象的包装。

    3)装饰者模式强调的是为被装饰对象增加额外的行为。举例:java.io包。

    4)代理模式强调的是对被代理对象进行控制。这些控制体现在很多方面,比如安全、权限控制等。

    适配器模式和外观模式容易和其他模式进行区分。下面重点比较装饰者模式和代理模式。

    5)装饰者模式和外观模式主要的区别就是,装饰者模式从来不创建被装饰的对象,它总是添加新功能到已经存在的对象上面;而代理模式在被代理对象不存在的时候会创建被代理对象。

    6)装饰者模式可以通过嵌套装饰添加多重额外功能,而代理模式一般不推荐使用嵌套代理。

    类图

    最后附上这四种设计模式的类图。

    适配器模式:

    Adapter+design+Pattern+in+Java

    外观模式:

    facade+pattern+in+Java

    装饰者模式:

    Decorator+Design+Pattern+in+Java

    代理模式:

    Proxy+Design+Pattern

     参考资料

    《Head First设计模式》

    http://javarevisited.blogspot.com/2015/01/adapter-vs-decorator-vs-facade-vs-proxy-pattern-java.html?utm_source=tuicool

  • 相关阅读:
    JavaScript经典语录
    ERP部门的添加(十一)
    List<T>Contains, Exists, Any之间的优缺点对比
    LINQ学习之旅(六)
    ERP仓库管理系统查询(十)
    MVC中Asp.Net管道(二)
    appfog 添加数据库支持
    appfog 使用
    java.util.ResourceBundle 读取国际化资源或配置文件
    Java 如何中断和恢复线程的执行
  • 原文地址:https://www.cnblogs.com/ljdblog/p/6490158.html
Copyright © 2011-2022 走看看