设计模式

系列文章:

一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理模式、适配器模式


文章目录

  • 设计模式
    • 前言
      • 一、 代理模式的定义
      • 二、代理模式类图和一个设计实例
      • 三、适配器模式定义
      • 四、装饰者、代理、适配器的区别

前言

  • 代理模式属于结构型模式中最为简单的模式之一,易于理解的同时又妙用无穷,能够适用于远程代理,安全保护,智能处理等多种方面。
  • 适配器模式较为复杂,同时与之前的装饰者又神似而有所差异,在Java输入输出流库中都是它们的身影

一、 代理模式的定义

顾名思义——代理模式就是为另外一个对象提供一个“代理人”,其他的访问都需要先通过该代理,判断or预处理后,再由代理对被代理对象进行控制。具体可以按照以下的图来理解:

浏览器向服务器发起的请求都被服务器程序代理,转发到真正的服务类,代理类作为中间人,可以执行判断请求、选择执行被代理类相关操作的功能、除此之外还能够实现安全保护等高级功能。
(Servlet、关于Servlet的概念及相关的Java Web基础知识可以到这篇文章——Java Web 基础之Servlet概念详解(Servlet是什么?主要功能?基础重点运用?))

二、代理模式类图和一个设计实例

首先,要求代理类和被代理对象都属于同一个类下的继承——方便代理能够无缝衔接被代理对象的功能。具体类图如下:

接下来讲一个实例:贴心电话小助手设计
出于某种需要,狂徒-张三需要一个贴心小助理来帮他处理来电请求,要求判断接听来自欧洲尼古拉斯协会的电话,其他电话一律不接,并礼貌回复。
具体设计如下,一切来电请求都由小助理处理,不能直接连接到张三(被代理对象)。

三、适配器模式定义

想必大家都使用过手机数据线转接头吧,这其实就是一种适配器,设计模式中的概念也同样如此——
将一个类的接口转化成客户所希望的另一种接口,实现类/对象的组合(数据线和充电口的紧密结合)

再结合类图分析一下适配器具体怎么运作的:

首先我们设计出了Adaptee,原来这个类使用得挺好,但是现在需要转化成另一个接口,在不完全放弃的情况下要求给该类/对象装一个适配器。

于是在要用特殊接口的时候,用Adapter包装一下——看起来很像装饰者模式,因为二者都是包装模式之一;又有点象接口代理(接下来讲三者的区别)

四、装饰者、代理、适配器的区别

先来看看三者的类图

(适配器模式和代理模式)

首先 :代理模式实现一对一代理,一个代理负责一个被代理对象的处理;而装饰者和适配器都可以层层嵌套,形成包装链。

然后 是装饰者是实现灵活扩展功能或者动态添加属性的需要;而适配器设计是为了满足不同接口以连接类与类,实现功能重用的需要;二者设计目的不同,装饰者设计模式更多用在设计之初,而适配器则是用于后期补偿。

设计模式——结构型模式之代理模式和适配器模式(类比+图解,从无到有,一文看懂几种模式的区别)相关推荐

  1. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  2. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  3. 设计模式-结构型模式篇

    设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...

  4. 设计模式-结构型模式-装饰模式

    设计模式-结构型模式-装饰模式 栗子 以成绩单需要家长签字为要求. 成绩单类图 // 抽象成绩单 public abstract class SchoolReport{// 成绩单你的成绩情况publ ...

  5. 4.C++设计模式-结构型模型

    4.C++设计模式-结构型模型 让类和类进行组合,获得更大的结构. 4.1 代理模式 4.1.1 代理模式的理论 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不 ...

  6. 23种设计模式——结构型设计模式(7种)

    目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...

  7. 设计模式 - 结构型

    结构型设计模式 结构型模式(Structural Pattern)关注类和对象的组合.其描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. ...

  8. JAVA设计模式--结构型模式--代理模式

    1.代理模式(Proxy Pattern) 一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 1.1意图: 为其他对象提供 ...

  9. 设计模式-结构型模式讲解下(装饰者、外观、代理)

    一.结构型设计模式 上篇,我们讲解了结构型设计模式的适配器.桥接.组合.享元模式. 文章地址:https://blog.csdn.net/qq_43692950/article/details/120 ...

最新文章

  1. CentOS 安装Apache
  2. Django项目准备和配置(MVT图解、创建项目和应用、更换解释器、安装应用、本地化、模板路径、项目中匹配urls、应用中匹配urls.py、准备视图、开启服务器、修改DATABAS配置信息)
  3. python使用正则表达式判别字符串是否以一个大写字符起始而跟随了一些小写字符
  4. python 词云_利用Python生成词云
  5. linux net.ipv4.ip_forward 数据包转发
  6. 如何在Epower工作流平台(企业流程管理平台)上建立OA系统
  7. CV之FD:基于dlib、cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果
  8. 详解XStream别名
  9. CIO大咖专访 | 从实战中提炼的企业数字化转型要点
  10. ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
  11. python模块matplotlib.pyplot用法_Python中Matplotlib模块的简单使用
  12. 【华为云技术分享】玩转小熊派BearPi(一)使用STM32CubeMX + HAL点亮一个LED
  13. 2013浙大878计算机基础综合大题答案解析
  14. 人工智能与深度学习概念(5)——目标检测-RCNN
  15. 机器学习笔记(三十二):集成学习、随机森林
  16. 基于微信小程序的点餐系统设计
  17. 股市最好用的大数据软件_十大股票软件排名谁知道?
  18. 二阶系统响应指标图_二阶系统的性能指标
  19. sql 按名称首字母拼音排序
  20. es文件无法找到局域网服务器,手机ES文件管理器局域网连接电脑WIN10,访问电脑文件...

热门文章

  1. docker拉取mysql镜像并启动
  2. 战舰世界手游微信登录不上服务器失败,战舰世界闪击战登不进去怎么办?无法连接服务器解决方法...
  3. 最大堆,最小堆插入/删除以及最大堆的排序
  4. 关于网站、微商城和小程序制作教程指导协助说明
  5. xilinx中文文档编号及其内容简介
  6. Vue3源码解析之入门
  7. eclipse java启动参数设置_[Java教程]eclipse.ini配置eclipse的启动参数
  8. sql查询技巧之记录数
  9. php 去除首位字符_PHP 字符串去除 trim、ltrim 与 rtrim 函数
  10. UNDO_RETENTIOIN