设计模式的理解

简介: 设计模式的理解

先重提一下课本上关于设计模式的定义:设计模式是一套被反复使用、多数人知晓的、经过分类编排的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。设计模式的出现让我们可以站在前人的肩膀上,通过一些成熟的设计方案来指导项目的开发与设计,更加方便得复用成功的设计和体系结构。

初看这个概念,确实有点抽象。下面谈谈我学完设计模式后对设计模式的理解。

没学设计模式之前,不明白设计模式是什么东西,接触设计模式之后,虽然知道了设计模式是什么,但是不明白这个东西将来在开发实践中有什么实际用处,所以刚开始学习设计模式的时候一直处于一种懵懵懂懂的状态。直到看到某位大佬的一句金句——设计模式是为了抵御需求变更带来的影响,或者说把影响降到最低。这句话对我来说真的是醍醐灌顶,让我瞬间明白了设计模式的实际作用。设计模式的运用提高了程序的可维护性和可扩展性,当产品经理提需求时把自己的代码改动降到最低。把握这个初衷后再来理解各种设计模式就会更加通透,也更能体会到到设计模式的重要性和价值,也会意识到这样宝贵的知识绝对不能落下,不学就是损失。明白了学习设计模式的意义,才有了学习的目标性。有目的的学习,才能提高学习效率,才能最大化吸收知识的精华。

简单来说,就是大佬们总结了23个套路,面对不同的需求场景,考虑使用不同的套路,避免将来被开发经理或者自己坑,一个新的需求上来,发现需要对系统中的代码做出较大改动,有时甚至需要把代码重构。这就是没有使用套路的下场,使用套路后,提前设计编排,考虑到以后的可维护性和可扩展性,这样大部分新需求都不会对原有代码做出较大改动。他好你也好,大家好才是真的好。果然是自古深情留不住,唯有套路得人心,编程的世界也不例外。

1456655-20221020235229980-1284128669.gif

提前把结构设计好,降低需求变更带来的影响。

23种设计模式分为三大类,创建型、结构型和行为型,这三大类设计模式涵盖了编程的大部分运用场景。编程过程可以简单分成三个大块,创建对象、使用对象的功能、对象之间相互通信协作完成一个任务。设计模式的三个大类,就分别对应了编程的三个部分。

创建复杂对象时,应该考虑不要在程序中直接编写创建对象的内部逻辑,创建型设计模式可以使得编码者可以不需要关心创建对象的内部细节,能够比较容易的应对类的增加,有效的提高程序的扩展性和可维护性,程序中不必书写复杂的创建过程,从而提高了程序的可读性,降低了程序员的开发难度,也就提高了开发效率。

当我们关注如何将现有类或者现有对象组织在一起形成形成更加强大的结构时,可以考虑使用结构型模式,比如使用适配器模式对不兼容的接口进行适配,使得这个原本不可用的接口变得可用,典型的例子就是电脑的转接头,不同类型的电脑想要连接在一起就需要一个转接头。

当我们关注系统中对象之间的相互交互,想要提高对象之间通信与协作的效率时,像职责链模式这样的行为型模式就可能非常有用了。比如职责链模式,请求的发起者不需要知道谁能处理这个请求,只需把这个请求交一个固定的人或对象,如果这个对象不能处理他会自动向下传递,直到有人处理为止。否则请求发起者在发现当前处理者无法处理这个请求,又重新去找下个处理者,这样效率是非常低的。使用职责链模式,就能实现请求发起者和请求处理者之间的解耦,请求发起者无需知道最终是谁处理了这个请求,只关心这个请求是否被处理了以及处理的结果。

从工厂方法模式到单例模式,从装饰设计模式到观察者模式,每个设计模式都有自己的优缺点,每个模式都有自己的最佳适用场景,没有包治百病的良方,也没有没有万能的设计模式,扬长避短地在不同的场景选用不同的模式,才能最大化发挥设计模式的作用。

设计模式的一个典型应用就是现今互联网中的各种web开发框架,比如Sping, Spring Boot, SpringMVC等等。用过这些框架的同学都应该有一种体会就是,非常人性化,简单易用,节省时间,提高开发效率。一些看似复杂的操作只需很少的代码或者配置即可完成,比如:在配置文件中简单配置可以即可完成对象的创建,通过加事务注解即可将该段程序控制在一个事务中执行,甚至可以自定义各种注解,几乎每个框架的可扩展性都非常高。

而这些开发框架之所以能这么简单易用,就是因为它们底层使用了大量的设计模式,比如通过组合模式解析xml配置文件;通过观察者模式完成依赖的自动更新;通过工厂方法模式提高创建对象的效率以及可维护性;通过动态代理模式完成各种切面编程,从而在面向对象编程的基础上进一步提高程序的复用率;通过适配器模式对各种功能接口进行适配,使得我们完成一个功能可以有非常多的接口选择,大大方便了我们的使用;还有通过装饰设计模式给现有类动态增加功能,等等。正是通过各种设计模式的合理设计和运用,框架的易用性、开发效率以及程序的执行效率才逼近于一个近乎完美的程度。

最后想说,正如课本的作者刘伟在序言中说到的那样,有了设计模式,我们的软件将变得更像一个艺术品,而不是一堆堆难以维护和重用的代码。

相关文章
|
5天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
12天前
|
存储 关系型数据库 MySQL
云数据库自研存储引擎:阿里云 PolarDB 相比开源 MySQL 性能提升数倍
云数据库自研存储引擎已成为云原生数据库竞争的核心技术高地。阿里云 PolarDB 通过 X-Engine 高压缩存储、PolarStore 用户态 IO + RDMA、IMCI 列存 HTAP 三大自研引擎组合,配合物理日志、跨节点 Buffer Pool 共享、Parallel Query 五大优化,实现写性能 6 倍、压缩 3-5 倍、AP 加速 100 倍、IO 延迟 -80% 的全面超越,让客户存储成本下降 65%、DBA 人力节省 80%。
453 114
|
5天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
311 0
|
5天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
12天前
|
人工智能 编解码 物联网
2026 最新Stable Diffusion 本地部署教程 下载安装使用详细图解(含官网安装包)
Stable Diffusion(SD)是2022年发布的开源文生图模型,由Stability AI等联合开发。支持文生图、图生图、局部重绘等,依托VAE降低算力需求,可在消费级显卡运行。本文提供秋葉aaaki制作的Windows整合包(含图形界面与插件),开箱即用,零配置启动。
|
28天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
1天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
415 11