目录
一、前言
二、设计模式的设计原则
三、创建型模式
1、单例模式
2、抽象工厂模式
3、建造者模式
4、工厂方法模式
5、原型模式
四、结构型模式
1、适配器模式
2、桥接模式
3、装饰器模式(包装器模式)
4、组合模式
5、外观模式
6、享元模式
7、代理模式
五、行为型模式
1、策略模式
2、模板方法模式
3、观察者模式
4、迭代器模式
5、责任链模式
6、命令模式
7、备忘录模式
8、状态模式
9、访问者模式
10、中介者模式
11、解释器模式
设计模式是一套反复使用的代码的总结,描述了问题及解决方案,使用设计模式可以提高代码的可重用性、代码的可读性和代码的可靠性。
创建型模式主要关注对象的创建方式
①饿汉式:在声明字段时创建实例,线程安全,但是上来就占用内存
②懒汉式:用的时候判断为null则创建实例,虽然延迟加载,但是线程不安全
③双重验证锁:懒汉式加锁,延迟加载且线程安全
④静态内部类:可以同时保证延迟加载和线程安全。
建造者将一个复杂对象的构建细节进行封装,StringBuilder就属于建造者模式
③静态工厂方法模式:静态方法,最常用
结构型模式主要关注如何组合和布局对象
抽象层与实现层分离,使他们可以各⾃独⽴的变化。比如将设备品牌有华为的、联想品牌的等等,设备类型还分为手机、电脑、平板等,就可以通过桥接模式设计结构。
在不影响原始对象的情况下,为其添加新的功能。
又叫部分整体模式,类似树形结构,是将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示。比如:有一个抽象地址类 实现类有地址组、ipv4地址、ipV6地址 等,地址组对象存放自己里面的抽象地址类。
可以理解为将所有的操作都集成到一个类里面。
相同对象只要保存一份,String 常量池、数据库连接池、缓冲池等等都是享元模式的应用
①静态代理:与装饰器模式不同的是,静态代理类与原来的类要实现相同接口
②动态代理:动态代理类可以代理实现接口下的同级类,用到反射
③Cglib 代理:代理类继承目标类
行为型模式主要关注对象的行为以及对象之间的交互方式
定义算法族,分别封装起来,可以在不修改原代码的情况下,灵活增加新算法,缺点是需要知道所有策略算法的区别,使用适合的算法类。
抽象定义了一个操作中的算法骨架, 在派生类中写每一个算法的具体实现逻辑。
比如:启动电脑需要先激活cpu,然后寄存器检测、然后SRAM检测等等,而不同品牌的电脑执行这些有不同的逻辑,在抽象类电脑中创建电脑启动方法,电脑启动方法中调用激活cpu,然后寄存器检测、然后SRAM检测等方法,而调用的方法只需要定义为抽象的,这些具体实现由派生类自己实现。
还叫发布-订阅模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。
迭代器模式能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素
也叫职责链模式,将请求沿着链进行处理。
javax.servlet.Filter#doFilter 就是责任链模式
将命令发出者和执行者解耦,Runable就是非常经典命令模式。
保存对象某个时间的状态,在适当的时候恢复。
将传统的判断(通过if或者switch判断状态)改为将各状态提取为不同对象,同一时间不同状态做出不同行为。
访问者模式把数据结构和作⽤于结构上的操作解耦合,使得操作集合可相对⾃由地演化。
中介者模式是迪米特法则的典型代表, 定义一个中介对象来封装一些列对象之间的交互,使原有的对象见解耦。
定义了一个解释器,用来解释规定表达。