常用的设计模式解析

设计模式概述(学习设计模式的必要性)

在工作过程中,难免会遇到一些读又读不懂、改又改不了、维护也维护不了的屎山代码。

而设计模式就是用来解决这些屎山代码的问题,让代码可读、可改、可扩展、可维护

设计模式一般分为三大类:创建型模式、结构型模式、行为型模式

所谓创建型模式,指的就是怎么优雅的创建一个类、让类可扩展、可读性好、也可维护

而结构型模式指的就是如何将类和对象组装成较大的结构,比如组合模式就可以让类尽可能少的去使用继承。

行为型模式则指的是为你项目中类的工作过程的沟通与职责传递委派

软件设计原则

软件系统设计时尽可能遵循的法则,对代码编写具有指导意义,设计模式也遵循以下常见的7个原则,可以说这是设计模式的基础:

  1. 单一职责原则: 一个类负责的职责(业务)尽量要单一;
  2. 开闭原则: 对扩展开放,对修改要封闭;
  3. 里氏代换原则: 可以扩展父类德功能,但不能改变父类原有德功能;
  4. 接口隔离原则: 将臃肿庞大德接口拆分为更小、更具体的接口;
  5. 依赖倒转原则: 依赖于抽象接口,而不依赖于具体实现;
  6. 迪米特法则: 又称为最少知道原则,是指一个对象类对于其他不相关对象类来说,知道的越少越好,两个类之间不要有过多的耦合关系;
  7. 合成复用原则: 尽量使用对象的组合,而不是继承来达到复用的目的;

创建型模式

包含工厂方法模式、抽线工厂模式、单例模式、生成器模式、原型模式

工厂模式

工厂方法模式创建对象的好处在于不需要知道对象是怎么创建的(可以屏蔽对象创建的细节)需要什么对象就找什么对象的工厂就可以。

使用场景:

  1. 仅仅完成实例化还不够,还需要做其他的一些操作才能对外提供使用,比如:有一定的初始化逻辑,需要包装一些高级功能
  2. 根据不同的参数或配置来个性化创建你需要的对象

单例模式

单例模式的核心是保证一个类全局只有一个实例,并提供一个访问该实例的全局入口,常见的单例模式实现有饿汉式、懒汉式、双重校验锁、CAS式等方式

生成器模式

生成器模式创建对象的好处在于可以将一个对象的创建过程进行分离,也可以做到通过多个简单对象一步步组装出一个复杂对象

使用场景:

  1. 创建对象时可配置项有很多,通过构造函数参数指定会导致参数列表很长,代码的可读性和易用性都很差,使用构造函数时如果传错顺序容易导致隐藏的bug
  2. 创建对象过程比较复杂,想将整个创建过程进行分离,可以选择Builder

结构型模式

包含适配器模式、桥接模式、外观模式、代理模式、组合模式、装饰模式、享元模式

适配器模式

把原本不兼容的东西通过适配修改做到统一,方便调用方使用

使用场景:

  1. 封装有缺陷的接口设计:引入的外部SDK在某些设计上有缺陷,我们可以包装一个适配器对其进行增强
  2. 统一多个类的接口设计:某个功能依赖的多个外部接口在定义上不一致,意味着我们没法复用一套逻辑来调用各个外部接口,就可以使用适配器模式将外部接口都适配为统一的接口定义
  3. 替换依赖的外部接口:把项目中依赖的外部接口替换为另一个,使用适配器模式可以减少对代码的改动。

代理模式

在不改变原始类(被代理的类)代码的情况下,通过引入代理类来给原始类附加额外的功能【一般来说和原功能无关】

应用场景:

  1. 业务系统的非功能性需求开发【监控、统计、鉴权、限流、事务、幂等、日志】:将这些附加功能与业务功能解耦,放到代理中统一处理。例如:Spring AOP
  2. 将实现底层操作细节隐藏起来,使用者只需要调用即可。例如:mybatis中的Mapper接口、RPC中消费端的接口等。
  3. 在缓存中的应用:例如:Spring Cache

装饰器模式

通过将一个对象包装到另外一个对象中来增加功能,核心是在不改变原有类的基础上给类新增功能

应用场景

  1. 在缓存中的应用:例如:InputStream和BufferedInputStream

行为型模式

包含责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式

责任链模式

允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者

应用场景

  1. 过滤器、拦截器:比如Servlet Filter, Spring Mvc Interceptor
  2. 流水线模式:netty的Handler实现

观察者模式

观察者模式也被称为发布订阅模式,理论描述为:在对象之间定义一个一对多依赖,当一个对象状态改变的时候,所有依赖的对象会自动收到通知

应用场景

  1. 事件监听:例如:Spring事件监听机制、Netty中的事件监听等
  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值