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

发布时间:2023年12月18日

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

目录


文章所属专区 日积月累


前言

我们知道,常见的有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还和它有关系?

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

文章来源:https://blog.csdn.net/qq_43238568/article/details/134916679
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。