1.单例模式
好处
使用场景
1.工具类
2.公共对象 比如 商品信息,网站菜单 ,网站新闻 , 解决方案 ,公用图片。
3.注册式单例 用户信息的存储。
2.原型模式
好处
1.节省程序中操作数据时需要大量的开辟对象 , 可以节省对象的开辟时间,提高程序性能。
使用场景
1.用户信息批量上传 , 比如excel 上传用户信息 , 大量的创建对象。
2.列表信息 集合信息 对象申请。
工厂模式
工厂模式包含 工厂方法 与 抽象工厂
好处
1.统一对象的访问入口 , 把管理权交给工厂 , 客户端程序员对对象的访问通过工厂访问 , 可以控制对象的开辟使用对程序对象进行解耦。
工厂方法
争对某一种对象进行管理创建
抽象工厂
多元化的对象创建,不同产品类型 产品结构进行创建 ,但是会增加程序的复杂度,可以对程序结构。
使用场景
1.网页返回信息对象统一 , 对象属性 msg code success 。
2.spring ioc 的基本原理 , 注册式单例 与 工厂模式
代理模式
好处
1.业务逻辑解耦合,提取出公共部分 , 让开发人员注重代码的业务逻辑,精简代码,大大提升了程序的可维护性。
使用场景
1.拦截器
2.过滤器
3.日志信息读取写入。
4.身份校验。
5.jdbc 连接数据库 , 释放资源。
6.权限控制。
策略模式
好处
封装不同算法 , 每个算法相互隔离 , 用户选择其中一种算法,进行使用,一般用于减少程序中的 if else , 同时也可以对 代码拆分减少程序的维护成本。
使用场景
1.支付场景 ,用户选择支付方式 , 支付宝 , 银行卡 , 微信。
2.打开方式 , 记事本打开 , 专用编辑器打开, 集成开发工具打开。
3.文件读取解析方式 , 读取 xml 文件 , 读取json 文件 , 读取Properties 文件 , 读取 yml 文件。
适配器模式
好处
使用场景
1.一个接口的使用者需要变更接口当中的数据结构 , 但是接口一般时发布出来就不会轻易进行修改的 , 如果在原接口的基础上变更,可能会在不经意直接影响其他服务,变更的风险较大,并且不好排查,可新写一个适配器进行处理,让其兼容新的使用者。
门面模式
好处
1.客户端统一数据来源,将要使用的数据经过处理通过统一的接口返回,减少了接口的调用频率 , 提升程序性能, 与代码的简洁性。
使用场景
1.业务架构三层 controller service dao。
2.http 数据接口。
享元模式
好处
1.减少对象的开辟 ,提升对象的重复使用率 ,减少内存使用率, 可以理解为 注册式单例。
使用场景
1.ioc 容器
2.内存穿透场景。 先从缓存读取如果缓存没有再从数据库读取 , 最后缓存到缓存。
模板方法模式
好处
1.程序员只需要设置好模板 , 之后往模板里面填充 一步步的数据操作 , 程序逻辑执行有条理 , 从上至下 , 类似于模块化无状态, 各个操作解耦合, 可以快速定位问题所在。
使用场景
1.支付场景
1.校验用户信息完整性
2.校验数据完整性
3.对数据加锁 , 下支付订单。
4.收到支付结果,修改订单状态,生成订单完成对象返回。
备忘录模式
作用
备忘录模式使用的场景很少,类似于回滚操作
使用场景
富文本编辑器 的 ctrl + z
存档功能,还原功能,快照
建造者模式
好处
使用场景
链式编程
1.student.setName(“张三”).setAge(18).setSex(0)
装饰者模式
好处
装饰对象 与 装饰品进行解耦合 , 用户灵活定制装饰对象,扩展装饰品,大大的提升了程序的灵活性。
使用场景
游戏人物装备的装饰 , 装饰服饰 , 装饰装备 , 服饰装备 人物 有多种最终的被装饰的结果 , 这个时候可以使用装饰者模式灵活的去扩展。
观察者模式
JDK 提供观察者接口 与 被观察者类
使用该模式可以观察对象的使用状态 , 在对象行为发生改变触发的时候通知观察者对象,进行相关处理。
使用场景
发布订阅模式是最常用的一种观察者模式的实现
消息推送
委派模式 与 简单工厂模式不属于 GOF 23 种设计模式之一。
委派模式可以理解为 全权静态代理模式 , 代理模式注重于代码增强 ,委派模式注重于结果。
简单工厂,快速生产对象。