设计模式-GOF23最常用对比

设计模式概述

  • 设计模式用最简单的话来说 设计模式 就是很多前人总结的经验是一种编程技巧 , 不用把设计模式看的太过于高深 , 开发过程遇到的场景 ,合理运用这种经验可以提升软件质量 , 让软件变得易于维护我将设计模式称之为经验 , 进行替换我认为更加恰当。

设计模式实际可运用的场景

  • 任何技术都是为业务服务的,如果技术不能给业务带来实际好处,那么这个技术将没有存在的意义。
  • 我这里举例最常用的GOF 23 中设计模式中 的场景 , 包括各种框架中也频繁的使用这种经验。

1.单例模式

好处

  • 使用单例模式可以 减少内存开销 , 提升程序的性能 , 从底层说 jvm 开辟一块内存 会涉及到 内存的申请 赋值 与 释放 , 与构造方法调用 ,如果同一块内存空间可以被复用,将减少软件的执行时间,和内存使用成本 属于一种优化策略。

使用场景
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 种设计模式之一。

委派模式可以理解为 全权静态代理模式 , 代理模式注重于代码增强 ,委派模式注重于结果。

简单工厂,快速生产对象。

你可能感兴趣的:(GOF,23种设计模式应用及原理)