当前位置: 首页 > news >正文

Java知识复习(七)常见的设计模式(装饰、代理、观察、策略、建造)

前言

参考书籍:《秒懂设计模式》

1、装饰器模式(Decorator)

1、装饰器模式:对原始对象动态地进行“包装”,是对类实例“装饰”的结果;类似于继承的效果,但这个过程是动态的,是可设置的

我们可以通过女生化妆的例子来展示其效果
首先创建展示接口和女生类
在这里插入图片描述
在这里插入图片描述
把化妆品类看作装饰器
在这里插入图片描述
客户端看到的效果就是这样
在这里插入图片描述
2、但化妆品也有不同,所以我们也可以把装饰器设置成抽象类,便于化妆品类继承
在这里插入图片描述
在这里插入图片描述
客户端效果如下在这里插入图片描述
3、装饰器模式的类结构
在这里插入图片描述

2、代理模式(Proxy)

1、代理模式:简单来说,就是代理方以业务对象的名义,代理了它的业务;就类似于经纪人和明星的关系,通常外人都是和经纪人交接,而不是直接和明星交接

我们通过路由器代理互联网服务的过程展示其效果
在这里插入图片描述
在这里插入图片描述
路由器对连接进行过滤后才能访问互联网
在这里插入图片描述
客户端效果如下:
在这里插入图片描述
2、与装饰器模式的区别:装饰器模式更加关注为其他对象增加功能;而代理模式更强调对访问的管控,甚至是将代理对象完全封装而隐藏起来

3、动态代理:指不需要专门针对某个接口去编写代码实现一个代理类,而是在接口运行时动态生成;其实就类似于抽象工厂,把共同的抽象特质提取出来,然后再分别组装的过程

4、代理模式的类结构在这里插入图片描述

3、策略模式(Strategy)

1、策略模式:强调的是行为的灵活切换,抽象理解就是假设因为某种原因无法实行A计划,就马上更换为B计划达成目的。

我们通过算法和计数器的结合过程展示其效果
首先定义统一的算法策略接口在这里插入图片描述
然后定义具体的策略类
在这里插入图片描述在这里插入图片描述
定义实际应用的计算机类
在这里插入图片描述
客户端类的效果
在这里插入图片描述
2、核心思想就是将算法的设计和计算器的硬件分离,就像一个游戏机切换不同的游戏那样

3、策略模式的类结构
在这里插入图片描述

4、观察者模式(Observer)

1、观察者模式:根据被观察对象和观察对象之间一对多的依赖关系建立起一种行为自动触发机制,即根据被观察对象状态的改变通知所有观察者做出响应

我们通过买家预订购买商家的物品的过程来展示其效果
在这里插入图片描述
在这里插入图片描述
只买一类物品的买家
在这里插入图片描述
啥都买的买家
在这里插入图片描述
客户端效果如下在这里插入图片描述
2、其实可以简单理解为充话费,如果话费到账了,就会有相关信息发给相关用户,如果没有到账,那消息就不会发送

3、观察者模式的类结构
在这里插入图片描述

5、建造者模式(Builder)

1、建造者模式:建造者模式又称为生成器模式,主要用于对复杂对象的构建、初始化,它可以将多个简单的组件对象按顺序一步步组装起来,最终构建成一个复杂的成品对象;即零件组装的过程

我们通过造房子的过程来理解其效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
工程总监执行工程实施过程
在这里插入图片描述
客户端实现效果在这里插入图片描述
2、其实就是流程统一,但是根据需求不同,施工方式不统一

3、建造者模式的类结构
在这里插入图片描述

http://www.lryc.cn/news/20077.html

相关文章:

  • Linux系统看门狗应用编程
  • Spring MVC 源码- LocaleResolver 组件
  • Servlet
  • 简单的周总结
  • Elasticsearch7.8.0版本进阶——IK中文分词器
  • 一个阿里P6的说不会接口自动化测试,他不会是自己评的吧...
  • 规则引擎与风控系统04:风控系统实例(下)
  • 我为什么选择Linux mint 21.1 “Vera“ ? Mint安装优化调教指南(分辨率DPI)
  • 雅思经验(十四)
  • 刚来的薪资20k,是我的2倍,我是真的卷不过,真的太变态了
  • 五、DeepWalk、Node2Vec论文精读与代码实战【CS224W】(Datawhale组队学习)
  • 学习 Python 之 Pygame 开发魂斗罗(四)
  • Linux 基础知识:指令与shell
  • 【数通网络交换基础梳理1】二层交换机、以太网帧、MAC地址数据帧转发原理详解
  • 《分布式技术原理与算法解析》学习笔记Day22
  • [MySQL]MySQL数据类型
  • 利用steam搬砖信息差赚钱,单账号200+,小白也能轻松上手!
  • 树与二叉树与森林的相关性质
  • MySQL面试题
  • 【蓝桥OJ—C语言】高斯日记、马虎的算式、第39级台阶
  • 基于深度学习的三维重建网络PatchMatchNet(二):dtu数据集介绍及PatchMatchNet中加载数据部分代码解析
  • 一文3000字从0到1实现基于requests框架接口自动化测试项目实战(建议收藏)
  • 【RockerMQ】001-RockerMQ 概述
  • 阿里是如何做Code Review的?
  • 内核调试:一次多线程调试与KASAN检测实例
  • Java - 数据结构,队列
  • ccc-pytorch-感知机算法(3)
  • LeetCode 225.用队列实现栈
  • 【面试】spring控制反转IOC
  • Spring 事务管理详解及使用