https://blog.csdn.net/A1342772/article/details/91349142
创建型:
工厂模式:
1.简单工厂
定义:一个创建对象的类,由这个类来封装实例化对象的行为;
特点:新增对象类型需要修改代码
2.工厂方法模式
定义:一个创建对象的抽象方法,由子类决定要实例化的类
特点:新增对象类型需要添加子类
抽象工厂模式:
定义:可以用抽象工厂模式创建工厂
特点:用来生产不同产品族的全部产品(支持增加产品族)
单例模式:
定义:确保一个类最多只有一个实例
特点:预加载(内存浪费)
懒加载(线程不安全)
jvm为了提高程序执行性能,会对没有依赖关系的代码进行重排序
关键字volatile保证对象实例化过程的顺序性
建造者模式:
定义:封装一个复杂对象构造过程,并允许按步骤构造
特点:将一个对象分解为各个组件,将对象组件的构造封装起来,可以控制整个对象的生成过程,对不同类型的对象需要实现不同的具体构造器的类,这可能回答大大增加类的数量
原型模式:
定义:通过复制现有实例来创建新的实例,无需知道相应类的信息
浅复制:基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的
结构型:
适配器模式:
定义:将某个类的接口转换成期望的另一个接口,消除接口不匹配所造成的兼容性问题
类的适配器模式:通过多重继承目标接口和被适配者类方式来实现适配
对象的适配器模式:
接口的适配器模式:
装饰器模式:
定义:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性<br /> 特点:所有的类都有一个共同的父类 [https://www.bilibili.com/video/BV1Vp4y187dK?from=search&seid=1519405643745042051&spm_id_from=333.337.0.0](https://www.bilibili.com/video/BV1Vp4y187dK?from=search&seid=1519405643745042051&spm_id_from=333.337.0.0)
代理模式:
定义:式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用
特点:静态代理,动态代理,CGLIB代理(快,无法代理final方法)
外观模式:
定义: 隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口
特点:客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可
桥接模式:
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。<br />特点:一个类如果有两个发展方向,就可以拆分出来,一个抽象类去实现一个接口<br />[https://www.bilibili.com/video/BV1Pp4y167DG?from=search&seid=18442243901751417356&spm_id_from=333.337.0.0](https://www.bilibili.com/video/BV1Pp4y167DG?from=search&seid=18442243901751417356&spm_id_from=333.337.0.0)
组合模式:
定义:它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性
https://www.bilibili.com/video/BV1854y147ez?from=search&seid=12785064546734054709&spm_id_from=333.337.0.0
享元模式:
定义:通过共享的方式高效的支持大量细粒度的对象
特点:JAVA 中的 String、核心代码用 HashMap 存储这些对象
行为型:
策略模式:
定义:定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户
特点:角色内部会持有一个抽象角色的引用,给客户端调用
https://www.bilibili.com/video/BV1454y187Er?spm_id_from=333.999.0.0
模板方法模式:
定义:父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成
两个类:
观察者模式:
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
迭代器模式:
定义:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示
责任链模式:
定义:如果有多个对象有机会处理请求,责任链可使请求的发送者和接受者解耦,请求沿着责任链传递,直到有一个对象处理了它为止
命令模式:
定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理
类的状态:
备忘录模式:
定义: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式
状态模式:
定义:我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
中间类:
访问者模式:
定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离。
中介者模式:
定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
解释器模式:
定义:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子,被用在 SQL 解析、符号处理引擎等