单例模式
如果一个类只允许创建一个对象(或实例),那么,这个类就是一个单例类,
这种设计模式就称为单例设计模式 (Singleton Design Pattern), 简称单例模式 (Singleton Pattern)。
Java单例模式可以在以下情况下使用:
线程池:通过使用单例模式,可以确保只有一个线程池实例存在,以便统一管理和复用线程资源。
电脑中的任务管理器就是第一个单例
数据库连接池:在访问数据库时,使用单例模式可以创建一个数据库连接池,以避免频繁地创建和释放数据库连接,提高系统性能和资源利用率。
缓存管理器:在应用程序中使用缓存可以提高性能。使用单例模式可以创建一个缓存管理器,确保只有一个缓存实例存在,用于统一管理缓存数据。
日志记录器:在应用程序中记录日志是常见的需求。使用单例模式可以创建一个日志记录器,用于统一管理日志操作和记录。
配置管理器:应用程序通常需要读取配置信息,例如数据库连接参数、服务配置等。
使用单例模式可以创建一个配置管理器,以便统一管理和加载配置信息。
工厂模式
工厂模式,主要用于创建对象时的一系列操作。
new 类
在我们平时创建对象的时候,一般使用New关键字来进行创建,并在构造函数里对实例化对象进行初始化。
然而个别对象在创建的时候很麻烦,可能需要对他进行一系列初始化操作,例如查询数据库,对属性赋值等等。
针对这种情况,我们可以引入 ”工厂“ 的概念,
我们不通过New关键字去创建对象了,我们直接去创建一个工厂,让工厂去帮我们创建对象。
(工厂模式通常创建类型不同但相关的对象,如:继承同一父类或接口的一组子类)
建造者模式 (Builder Pattern)
又称为构建者模式或生成器模式。
实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,其难点在于应用场景。
我们在看过代码后思考下列两个问题:
一:直接使用构造函数或配合setter方法就能创建对象,为什么还需要通过建造者模式创建呢?
二:建造者模式和工厂模式都可以创建对象,它们的区别是什么?带着这两个问题,我们学习建造者模式。
代理模式 (Proxy Design Pattern)
在不改变原始类(或称为被代理类)的情况下, 通过引入代理类来给原始类附加不相关的其他功能。
代理模式应用场景:
代理模式的基本功能是通过创建代理类为原始类附加不相关的其他功能。
代理模式可以应用在开发一些非业务需求上,如监控、统计、鉴权、限流、事务、幂等和日志
我们以后在学习Spring框架时,会对代理有进一步的了解
装饰器模式
是指在不改变现有对象结构的情况下,动态的给改对象增加一些职责(即增加其额外功能)的模式。
装饰器模式通常在以下几种情况使用。
当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。
例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。
当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰器模式却很好实现。
当对象的功能要求可以动态地添加,也可以再动态地撤销。
职责链设计模式 (Chain of Responsibility Design Pattern)
简称职责链模式。
将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求;将这些接收对象串成一条链,
并沿着这条链传递 这个请求,直到链上的某个接收对象能够处理它为止
(Avoid coupling the sender of a request to its receiver by giving more than one
object a chance to handle the request. Chain the receiving objects and pass the
request along the chain until an object handles it)。
在职责链模式中,多个处理器(也就是定义中所说的“接收对象”)依次处理同一个请求。
一个请求首先经过A处理器处理,然后,这个请求被传递给B 处理器,B处理器处理完后再
将其传递给C 处理器,以此类推,形成一个链条。因为链条上的每个处理器各自承担各自的 职责,
所以称为职责链模式。