软件设计模式

news/2024/11/24 12:09:35/

软件设计模式

1.设计模式分类图

2.常见的设计模式

2.1代理模式

1.代理模式?

  • 结构型的设计模式。也算是行为型的。
  • 核心:调用方和被调用方之间增加一个中介者。也就是代理。
  • 调用方->代理->被调用方
  • 案例:买房子找中介,求职找猎头

2.为什么出现中介???

  • 交给专业的人办理。减少麻烦和成本。

如果?add学生和删除学生并打印日志。

  • 添加日志
  • 过些天加上事务
  • 。。。。

复杂,可维护性差。面向对象的核心对扩展开放,对修改封闭。事务,日志不属于学生管理业务,我们需要交给专门的类去处理。代理的出现可以解决这个问题。

3.简介:使用代理类。给对象的行为增加辅助功能的解决方案就是代理模式。上面这种方式是动态代理。许多类都需要这个都需要单独设置一个代理类,算是静态代理。

4.动态代理:就是灵活的了。利用“反射”。InvocationHandler接口的Proxy类。

JDK本身有动态代理,或者是

cglib_百度百科Java的动态代理的扩展。

4.代理模式和装饰器的区别?

  • 代理模式和装饰器都是把原有的对象放到代理模式和装饰器中去调用有什么区别呢???

装饰器来说:是自己人,增加的功能是是对自己的增强

代理:是外人,增加的功能和本身没有之间的关系

2.2职责链模式

1.简介:行为型的。核心在于链。

2.一个任务从A->B->C,最终由C进行处理,形成了一个完整的任务处理链条。

核心思想如下:

  • 面对一个任务每个任务处理者需要研判自己能否处理该任务。
  • 如果能处理则处理并返回
  • 如果不能处理交给下一个任务处理者
  • 直到任务被处理完成。

A,B,C称为Handler,产品经理是CLient角色。

像是数据中的链表。

3.选择职责链的模式好处是什么???

  • 更加灵活
  • 我们可以让多个任务处理者都对任务进行部分处理,直到链条最后才能把任务处理完毕
  • 例如:若干个过滤器形成了一个职责链,每个过滤器负责过滤掉输入信息当中的部分非法内容。此时策略模式是无法进行实现的。

4.如何使用UML进行表示???

5.用代码如何进行实现呢???

职责链中的每一个具体的handler都继承自统一的抽象类。

每一个Handler对象都有一个successor成员,指向它的下一个任务处理者。就像链表系欸但的next指针一样。

客户端如何进行调用

只需要设置好整个链路和处理者的次序。然后直接调用第一个处理者的handleRequets方法。就相当于启动了整个链路。

当需要修改的时候只需要修改底层的逻辑。重新的配置链路就可以,添加和删除Handler或者改变Handler的次序。

6.职责链的缺点???

  • debug的时候不是很友好。深入很多层。

7.什么框架使用了职责链模式???

  • tomcat,的过滤器,Filter设置访问权限,参数合法性等
  • Spring MVC中也设置了职责链,当客户端的http请求到了web应用之后,会被mvc的框架的DispatcherServlet类进行分发,,分发给对应的controller层的具体方法,进入controller层的业务逻辑之前,会经过一系列的interceptor

http://www.ppmy.cn/news/37367.html

相关文章

4年资深测试总结,Jmeter 接口测试对请求字段的加密实战,即学即用......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 大家在工作中做接口…

贪心算法(四)

4.更多练习题 4)力扣https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/这道题运用贪心算法,就是每天只考虑与前一天的差价,只要差价大于零,从局部最优来考虑,就应该卖出前一天的股票。这样可以得到全…

[JAVA]重写

1.重写的概念 重写,也被称为覆盖。重写是子类对父类的非静态,非private修饰,非final修饰,非构造的方法实现过程的重新编写。子类重写的方法的参数和返回值类型与父类的方法相同。 2.方法重写的规则 子类重写的方法与父类的参数…

让PyTorch训练速度更快,你需要掌握这17种方法

掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练。近日,Reddit 上一个帖子热度爆表。主题内容是关于怎样加速 PyTorch 训练。原文作者是来自苏黎世联邦理工学院的计算机科学硕士生 LORENZ KUHN,文章向我们介绍了在…

python外篇(内存泄露)

目录 了解 循环引用造成的内存泄露 大量创建对象造成的内存泄漏 全局对象造成的内存泄露 不适当缓存造成的内存泄露 内存分析工具 了解 ### 以下为Python中可能会出现内存泄露的情况: (1) 循环引用:当两个或多个对象相互引用,造成…

JVM 堆

堆的核心概述 堆与进程 1 堆针对一个JVM进程来说是唯一的,一个进程只有一个JVM实例,一个JVM实例中就有一个运行时数据区,一个运行时数据区只有一个推和一个方法区。 2进程包含多个进程,他们是共享一个堆空间的。 3Java堆在JVM启动…

让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

让你的作品更出色—— 词云Word Cloud的制作方法(基于python) 本文目录: 一、词云的简介 二、 实现原理和流程 1、制作词云流程图 2、词云实现原理 三、 实现词云的方式 1、安装词云相关模块库 2、WordCloud库 3、stylecloud库 四、总结 一、词…

USB键盘实现——设备描述符(一)

文章目录设备描述符仓库地址获取设备描述符请求标准设备请求USB 控制端点收到的数据设备描述符返回设备描述符实现设备描述符数据设备描述符分析附 STM32 枚举日志设备描述符 设备描述符内容解析和 HID鼠标 一致。 仓库地址 仓库地址 获取设备描述符请求 标准设备请求 ty…