当前位置: 首页 > news >正文

【设计模式】漫谈设计模式

这篇文章里说一下对设计模式的个人的理解。本篇文章更类似于随笔而非技术文档。

设计模式最早是在上个世纪就被人提出来了,如今被奉为圣经,也就是GOF等人写的《设计模式》,其中的设计模式,是指导开发者如何进行开发出高内聚、低耦合、易扩展的好代码的。我在小白时,时常疑惑,设计模式在开发中如何进行落地呢?

今天把以前的疑问落在文章中,回答过去的自己吧。

首先要知道的是设计模式提出的时代背景,出在一个硅谷的黄金时代,个人开发者靠自己就可以写出商用软件的时代。此时,如何只靠自己,写出高内聚、低耦合的好代码,是那时开发者的问题。GOF等人设计模式的总结,使得好的开发经验得到了总结,依靠这些模式,使得开发者可以更轻松的进行设计和开发。

不过,大人,时代变了。如今已经不是硅谷黄金时代,仅靠个人就可以实现一个火遍全球的商用软件那样英雄主义的事,不复存在,大多数开发者,只是一个开发工作中的小小的分子。我们不得不依靠大量成熟的商用中间件和框架及更易使用的高级语言,这大大加速了我们开发的速度,减轻了我们设计和开发的难度,同时意味着,我们对于设计模式的依赖,变得更小了。即使不怎么懂设计模式的小白,依靠spring boot也能快速搭建起一个web项目。

但是这并不意味着设计模式不存在或者无用了,设计模式实际上大量存在于框架和中间件中(只是作为java web开发,一般很少会直接用到设计模式),举例如下,

线程池、连接池,用到的是享元(Flyweight)模式

java和cglib的动态代理,用的是代理(Proxy)模式

spring框架中的过滤器在使用时,会从spring中传个参数叫filterChain,这个用的是责任链(Chain of Responsibility)模式

实现了Collection接口的集合类中,都会提供一个叫做Iterator的迭代器,用于遍历集合,用到的是迭代器(Interator)模式

如今用于项目解耦的MQ,用到的是中介者(Dediator)模式

zookeeper里的watcher机制,一个zk节点可以被多个watch关注,在变动时触发回调,用的是观察者(Observer)模式

lombok框架的builder注解,用的是建造者(Builder)模式

spring框架容器在注入对象时,类型为single对对象进行复用时,用的是单例(Singleton)模式

还有我们在进行RPC服务提供时,常常把一个api接口层的包提供出去,用的是外观(Facade)模式

我们在开发时,经常会给每个模块的实现类抽象出一个接口来,规定impl类的行为,这个用的是模板方法(Template Method)模式

除了最后两个,web开发在开发中其实很少直接应用设计模式。至此,以前我的疑问已经回答了。我们是间接的应用了设计模式的多,直接应用设计模式的少。

http://www.lryc.cn/news/423958.html

相关文章:

  • 第N5周:Pytorch文本分类入门
  • SpringBoot 自定义 starter
  • TDengine Invalid data format 问题定位
  • Spring Boot 使用 MongoDB 教程
  • Python办公自动化:使用openpyxl 创建与保存 Excel 工作簿
  • 【张】#11 Union 共用体
  • Xcode 在原生集成flutter项目
  • ES6的promise
  • 轻松找回:如何在PostgreSQL 16中重置忘记的数据库密码
  • EVAL长度突破限制
  • 如何判断树上一个点是否在直径上
  • docker 部署 RabbitMQ
  • 设计模式 - 过滤器模式
  • 使用 Locust 进行本地压力测试
  • 【图形学】TA之路-矩阵应用平移-旋转-大小
  • Spring 循环依赖解决方案
  • 可视化大屏:如何get到领导心目中的“科技感”?
  • 基于Python的金融数据采集与分析的设计与实现
  • 使用Sanic和SSE实现实时股票行情推送
  • redis散列若干记录
  • Java面试八股之什么是STOMP协议
  • 【自用】Python爬虫学习(一):爬虫基础与四个简单案例
  • [python]uiautomation.WindowControl函数用法
  • 学习记录第二十七天
  • servlet的执行顺序
  • Go语言 类封装和绑定方法
  • DirectShow过滤器开发-写WAV音频文件过滤器
  • php根据截止时间计算剩余的时间,并且在剩余时间不足1天时仅显示小时数
  • Docker最佳实践进阶(一):Dockerfile介绍使用
  • Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术