常见的设计模式以及实现方法总结

主图==========

目录

代码中使用的设计模式总结

  • 前言
  • 常见的23种设计模式
  • Singleton模式(单例模式)
    • 理论
    • Spring中创建的Bean
  • Prototype模式(原型模式)
    • 理论
    • Spring中创建的Bean
  • Builder模式(构造器模式)
    • 理论
    • @Builder实现了构造器模式
    • 参考
  • Proxy模式(代理模式)
    • 理论
    • Spring AOP 实现了代理模式
  • Factory模式(工厂模式)
    • Spring IOC 实现了工厂模式
  • Observer 模式(观察者模式)
    • 理论
    • Spring中使用
  • Adapter 模式(适配器模式)
    • 理论
    • Spring中使用
  • Wrapper 模式(装饰器模式)
    • 理论
    • Spring中使用
  • 参考


文章所属专区 日积月累


前言

我们知道,常见的有23种设计模式,我们在代码编写时可能有意无意会用到,或者使用一些框架,注解,插件时使用到,所以特此做一篇总结。

常见的23种设计模式

创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

Singleton模式(单例模式)

理论

单例模式是一个创建型模式,一个类只有一个实例,并提供一个访问它的全局访问点,可以直接访问,不需要实例化。

Spring中创建的Bean

Spring中创建的Bean默认都是单例的。

Prototype模式(原型模式)

理论

原型模式是一个创建型模式,用于创建重复对象,同时又能够保证其性能。

Spring中创建的Bean

Spring中创建的Bean制定其类型为prototype。

Builder模式(构造器模式)

理论

构造器模式是一个创建型模式,它的主要思想是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建出不同的表示。

@Builder实现了构造器模式

在Lombok插件中 @Builder 注解实现了构造器模式,假设在一个类上使用了@Builder注解,那么编译后,在这个类的class文件中会多出一个builer()方法和一个这个类的 public static xxx builder的静态内部类,持有要构建对象的所有属性,设置属性的方法都返回当前Builde实例this,这样可以流式的设置属性而不用一个个set了。
流式的设置属性例子(看着是不是方便了许多):

User user = User.builder()
                    .name("Tom")
                    .age(25)
                    .email("tom@example.com")
                    .build();

参考

Lombok的Builder与构造者模式

Proxy模式(代理模式)

理论

代理模式是一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。

Spring AOP 实现了代理模式

Spring中的AOP允许开发者在不修改现有代码的情况下,向程序中新增新的功能(前置通知、后置通知、异常通知、返回通知还是环绕通知等)。Spring中的AOP基于代理模式,首先会自定义一个注解;其次,定义一个切面(Aspect)类,在切面中定义切点和通知,切点(方法的拦截规则),在使用了这个注解的方法会被拦截下来,拦截下来之后,就可以进行前置通知、后置通知、异常通知、返回通知还是环绕通知等。

Factory模式(工厂模式)

##理论
工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来指向新创建的对象。

Spring IOC 实现了工厂模式

在Spring中通过BeanFactory 个ApplicationContext创建Bean对象。Spring中 通过IOC容器来控制对象,而无需再由使用者控制。

Observer 模式(观察者模式)

理论

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。

Spring中使用

Listener,event,multicast。

Adapter 模式(适配器模式)

理论

适配器模式是一种结构型设计模式,它是作为两个不兼容的接口之间的桥梁,将一个类的接口转化成客户希望的另一接口。

Spring中使用

Adapter ,HandlerAdapter。

Wrapper 模式(装饰器模式)

理论

装饰器模式是一种结构型设计模式,许向一个现有的对象添加新的功能,同时又不改变其结构。

Spring中使用

BeanWrapper。

参考

JAVA 中常用的设计模式,含案例和注释
23种设计模式?一目了然!
设计模式:代理模式是什么,Spring AOP还和它有关系?

给个三连吧 谢谢谢谢谢谢了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM之堆学习

一、Java虚拟机内存结构图 二、堆的介绍 1. 前面学习的程序计数器,虚拟机栈和本地方法栈都是线程私有的,堆是线程共享的; 2. 通过 new 关键字,创建的对象都会使用堆内存,其特点是: 它是线程共享的&#x…

Landsat7_C2_ST数据集2019年1月-2022年12月

简介: Landsat7_C2_ST数据集是经大气校正后的地表温度数据,属于Collection2的二级数据产品,以开尔文为单位测量地球表面温度,是全球能量平衡研究和水文模拟中的重要地球物理参数。地表温度数据还有助于监测作物和植被健康状况&am…

单片机——通信协议(FPGA+c语言应用之spi协议解析篇)

引言 串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以及它们如何帮助减少系统电路板设计中的数…

宏景eHR SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR app_check_in/get_org_tree.jsp接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞…

JVM的五大分区

1.方法区 方法区主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。 2.虚拟机栈 虚拟机栈也就是我们平时说的栈内存,它是为java方法服务的。每个方法在执行的 时候都会创建一个栈帧,用于存…

SpringCloud面试题及答案(最新50道大厂版,持续更新)

在Java开发中,Spring Cloud作为微服务架构的关键组成部分,为了帮助广大Java技术爱好者和专业开发人员深入理解Spring Cloud,本文《SpringCloud面试题及答案(最新50道大厂版,持续更新)》提供了最前沿、最实用…

C#比较两个list集合类的差异

C#中List中自带的差集计算方法 List 继承了Enumerable ,Enumerable 中有一个Except方法 它有两个实现: 第一个实现是通过使用默认的相等比较器对值进行比较,生成两个序列的差集。 第二个实现是通过使用指定的 IEqualityComparer 对值进行…

一分钟带你了解电容

电容器中的电容究竟是怎么定义的? 一个电容器,如果带1库的电量时两级间的电势差是1伏,这个电容器的电容就是1法拉,即:CQ/U 。但电容的大小不是由Q(带电量)或U(电压)决定…

[C错题本]转义字符/指针与首元素/运算

\a响铃 \b退格 \f换页 \r回车 \t水平制表 \v垂直制表 \单引号 \"双引号 \\反斜杠 \0dd八进制&#xff08;0-7&#xff09; \xdd(0-f)注意x一定不能大写 而且十六进制千万不能写\0xint main() {char s[]"ABCD", *p;for (p s 1; p < s 4; p)printf("%s…

简记修复改etc下profile失败的补救措施

现象 下午配置环境变量一个小小的失误&#xff0c;把etc文件夹下的profile改崩了&#xff0c;导致很多基本命令都用不了&#xff0c;服务器出现了下面这种情况。 [rootxxxx ~]# vi /etc/profile -bash: vi: command not found [rootxxxxx~]# vi -bash: vi: command not found…

今天我们深刻认识一下 Java虚拟机的程序计数器

1、为什么需要程序计数器 为了保证程序(在操作系统中理解为进程)能够连续地执行下去&#xff0c;CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用&#xff0c;所以通常又称为指令计数器。在程序开始执行前&#xff0c;必须将它的起始地址&#xff0c…

「Azure架构风格」Azure云不同的 架构风格

架构风格是一系列具有某些共同特征的架构。例如&#xff0c;n层是一种常见的体系结构样式。最近&#xff0c;微服务体系结构开始受到青睐。架构风格不需要使用特定的技术&#xff0c;但是有些技术非常适合特定的架构。例如&#xff0c;容器自然适合于微服务。 我们已经确定了一…

XUbuntu22.04之npm解决pm WARN deprecated(一百九十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

103基于matlab的极限学习机(ELM)和改进的YELM和集成极限学习机(EELM)是现在流行的超强学习机

基于matlab的极限学习机&#xff08;ELM&#xff09;和改进的YELM和集成极限学习机(EELM)是现在流行的超强学习机&#xff0c;该程序是三者的方法比对。 包括学习时间&#xff0c;训练精度和测试精度的对比。数据可更换自己 的&#xff0c;程序已调通&#xff0c;可直接运行…

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目&#xff0c;自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 &#xff1a;Ho1aAs 版权属于&a…

vscode 同步插件

vscode 扩展商店链接 https://marketplace.visualstudio.com/vscode settings sync 插件

【SpringBoot篇】基于布隆过滤器,缓存空值,解决缓存穿透问题 (商铺查询时可用)

文章目录 &#x1f354;什么是缓存穿透&#x1f384;解决办法⭐缓存空值处理&#x1f388;优点&#x1f388;缺点&#x1f38d;代码实现 ⭐布隆过滤器&#x1f38d;代码实现 &#x1f354;什么是缓存穿透 缓存穿透是指在使用缓存机制时&#xff0c;大量的请求无法从缓存中获取…

Flutter 打包 iOS 苹果 IPA 应用有哪些优势?如何实现?

经常和移动应用开发相关的话题打交道的伙伴们都知道。在开发移动应用时&#xff0c;选择合适的打包方式对于应用的发布和分发至关重要。在今天这篇文章中&#xff0c;我将和大家聊聊 Flutter 打包 iOS 苹果 IPA 应用的优势&#xff0c;并分享一些使用 Flutter 打包 ios 苹果 ip…

占位图片(Placeholder Image)

一、引言 在网页设计和开发中&#xff0c;占位图片&#xff08;Placeholder Image&#xff09;是一种常见的技术手段&#xff0c;用于在用户上传图片之前或者图片加载失败时&#xff0c;展示一个临时替代的图片&#xff0c;以提高用户体验。本文将详细介绍占位图片的实现原理和…

wvp-GB28181-pro 2.0+ZLMediaKit 使用Dockerfile制作镜像以及部署【CentOS7】

说明 部署gb28181和zlm主要需要构建两个镜像&#xff0c;第一个为基础镜像&#xff0c;以centos7为基础构建新的基础镜像base.Dockerfile,第二个镜像为服务部署镜像server.Dockerfile&#xff0c;以第一个镜像base.Dockerfile构建出的镜像为基础镜像进行构建 整个基础镜像的构…