设计模式的一点思考

关于设计模式总结的比较好的一篇文章,浅显易懂便于理解:
https://javadoop.com/post/design-pattern

一、创建型设计模式

1. 工厂设计模式

为什么,什么时候用工厂模式:调用方要创建一个类,但是对于不同情况要创建不同的类,具体的类不确定(如对于不同的语言,需要创建不同的解析器)。这时候与其在调用方进行相应的逻辑判断决定去创建哪个类,不如定义一个工厂类,由工厂类来决定怎么创建,使调用方的代码简洁明了。

  • 简单工厂:通过传入静态方法的参数决定创建哪种类,对于大部分情况简单工厂已经足够
  • 工厂方法:如果情况比较复杂,对于不同类型的类还要根据具体情况决定要创建哪种具体的类,可以使用工厂方法;先创建该类型的工厂,再根据参数决定去创建哪种具体的类
  • 抽象工厂:如果要创建某一系列的产品,那么抽象工厂是最好的选择。
2. 建造者模式

优雅的链式创建一个类,可以使用建造者模式。(如创建一个请求,要赋值很多参数)最简洁的方式是使用 lombok 的

二、结构型模式

1. 代理模式和装饰器模式

当需要对一个类进行增强的时候,可以考虑使用代理模式和装饰器模式

  • 代理模式:可以对类进行简单的增强。不过感觉静态代理使用的较少,如SpringAOP会采用动态代理的方式。
  • 装饰器模式:相比于代理模式更加灵活,可以通过不断嵌套的方式来对类进行反复的增强,最典型的是IO流。
2. 桥梁模式、策略模式和模板方法模式

当一个类进行某些行为,该行为的整体流程是可知的,但是具体的执行方式需要根据不同情形决定,这时候可以采用桥梁模式、策略模式或模板方法。(如JDBC,JDBC API可以针对任何数据库引擎发出查询指令,具体的底层实现交由不同的JDBC驱动器去实现)

  • 桥梁模式策略模式非常相似,只是桥梁模式在调用类再加了一层抽象而已。桥梁模式的耦合更低,结构更复杂一些。
  • 模板方法模式则更简单,直接省去策略这一层抽象,具体怎么实现直接交给子类。但是模板方法定义的范围太广,需要直接创建一个子类,只依赖某一组件时不太适用。(能用聚合尽量不用继承)
3. 享元模式
  • 享元模式:本质就是复用已经生成的对象,可以理解为一种缓存,避免多余的查询和内存的浪费。(典型的是数据库连接池)

三、行为型模式

1. 观察者模式

本质就是事件发布和消息订阅,当一个事件发生需要通知其他各个组件时,可以采用观察者模式。

在生产实际中,消息队列的使用其实就是一种典型的观察者模式。

2. 责任链模式

当涉及到一个个流程步骤,且需要流程间的灵活组合的时候,可以采用责任链模式

3. 状态模式

当一个类涉及的状态操作很多,可以直接将这些状态抽象出来,减少这个类的复杂性。当需要对这个类的状态进行操作上,直接通过具体的状态类进行操作,而不是关注被操作的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值