设计模式应该怎么学

文章目录

  • 真正学会设计模式的正确路径(超简单)
    • [第一步:先学 5 大设计原则](#第一步:先学 5 大设计原则)
    • [第二步:只学最常用 8 种](#第二步:只学最常用 8 种)
    • [第三步:**每个模式只记一句话 + 一个业务场景**](#第三步:每个模式只记一句话 + 一个业务场景)
    • [第四步:在 Spring / MyBatis / JDK 里找模式](#第四步:在 Spring / MyBatis / JDK 里找模式)
      • [1. 单例模式(Singleton)](#1. 单例模式(Singleton))
      • [2. 工厂 / 抽象工厂(Factory)](#2. 工厂 / 抽象工厂(Factory))
      • [3. 策略模式(Strategy)](#3. 策略模式(Strategy))
      • [4. 模板方法(Template)](#4. 模板方法(Template))
      • [5. 适配器模式(Adapter)](#5. 适配器模式(Adapter))
      • [6. 装饰器模式(Decorator)](#6. 装饰器模式(Decorator))
      • [7. 观察者模式(Observer)](#7. 观察者模式(Observer))
      • [8. 建造者模式(Builder)](#8. 建造者模式(Builder))
  • 三、一句大实话

设计模式本身就不是"靠背"的东西 ,它难,是因为它的 打开方式不对 。

真正学会设计模式的正确路径(超简单)

第一步:先学 5 大设计原则

不用背,理解意思就行:

  • 单一职责:一个类只干一件事
  • 开闭原则:扩展开放,修改关闭
  • 里氏替换:子类能替换父类
  • 接口隔离:接口小而专
  • 依赖倒置:依赖抽象,不依赖细节

原则懂了,模式自然懂。

第二步:只学最常用 8 种

其他全部暂时扔掉:

  1. 单例(Singleton)
  2. 工厂/抽象工厂(Factory)
  3. 策略(Strategy)
  4. 模板方法(Template)
  5. 适配器(Adapter)
  6. 装饰器(Decorator)
  7. 观察者(Observer)
  8. 建造者(Builder)

第三步:每个模式只记一句话 + 一个业务场景

比如:

  1. 单例(Singleton)

    一句话:全局只创建一个对象,避免重复实例浪费资源。

    场景:项目中的线程池、连接池、配置工具类,整个系统只需要一份。

  2. 工厂/抽象工厂(Factory)

    一句话:把创建对象的逻辑封装起来,外部只需要拿产品,不用关心怎么 new。

    场景:系统接入支付宝、微信、云闪付,通过工厂统一获取不同支付实例。

  3. 策略(Strategy)

    一句话:定义一组可互换的算法,运行时灵活切换不同实现。

    场景:订单结算支持原价、折扣、满减、会员价等多种计价方式自由切换。

  4. 模板方法(Template)

    一句话:固定业务流程骨架,可变步骤交给子类实现。

    场景:统一的审核流程(提交→校验→审批→通知),不同业务只自定义校验逻辑。

  5. 适配器(Adapter)

    一句话:把不兼容的接口包装一层,转换成目标接口,让系统能无缝使用。

    场景:对接多个第三方短信服务商,通过适配器统一成一套 sendSms 接口。

  6. 装饰器(Decorator)

    一句话:不修改原有类,动态给对象叠加额外功能。

    场景:给基础的 API 服务依次添加日志、限流、缓存、加密等增强能力。

  7. 观察者(Observer)

    一句话:一个对象状态变化,自动通知所有依赖它的对象。

    场景:用户下单支付成功后,自动通知库存扣减、发送短信、推送消息、生成账单。

  8. 建造者(Builder)

    一句话:分步构建复杂对象,链式调用,结构清晰。

    场景:构建复杂的查询条件、订单参数、Http请求对象,用链式优雅拼装属性。

第四步:在 Spring / MyBatis / JDK 里找模式

你天天用,只是没意识到:

1. 单例模式(Singleton)

一句话:全局唯一实例

  • Spring :@Scope("singleton"),所有默认 Bean 都是单例
  • MyBatis :SqlSessionFactory 全局唯一
  • JDK :Runtime.getRuntime()、Desktop.getDesktop()

2. 工厂 / 抽象工厂(Factory)

一句话:封装对象创建,不直接new

  • Spring :BeanFactory、ApplicationContext
  • MyBatis :SqlSessionFactory 创建 SqlSession
  • JDK :LoggerFactory.getLogger()、BeanFactory

3. 策略模式(Strategy)

一句话:算法可互换,运行时切换

  • Spring :ResourceLoader(切换文件/网络/classpath资源)
  • MyBatis :StatementHandler(切换PreparedStatement/CallableStatement)
  • JDK :Comparator 比较器、ThreadPoolExecutor 拒绝策略

4. 模板方法(Template)

一句话:固定流程骨架,子类填细节

  • Spring :JdbcTemplate、RedisTemplate、RestTemplate
  • MyBatis :BaseExecutor
  • JDK :HttpServlet(doGet/doPost)、AbstractList

5. 适配器模式(Adapter)

一句话:接口不兼容,包一层转换

  • Spring :HandlerInterceptorAdapter、WebMvcConfigurerAdapter
  • MyBatis :LogAdapter(适配Log4j/Slf4j)
  • JDK :Arrays.asList()、InputStreamReader(字节转字符)

6. 装饰器模式(Decorator)

一句话:动态增强,不改原类

  • Spring :SessionAutoFlushProxy、BeanWrapper
  • MyBatis :CachingExecutor 给执行器加缓存
  • JDK :BufferedReader、BufferedInputStream、DataInputStream

7. 观察者模式(Observer)

一句话:一个变化,自动通知一堆

  • Spring :ApplicationEvent + ApplicationListener
  • MyBatis :Interceptor 拦截器
  • JDK :EventListener、Button.addActionListener

8. 建造者模式(Builder)

一句话:链式构造复杂对象

  • Spring :BeanDefinitionBuilder、MockMvc
  • MyBatis :SqlSessionFactoryBuilder、CacheBuilder
  • JDK :StringBuilder、Lombok @Builder

一看源码,瞬间顿悟。

三、一句大实话

设计模式不是学问,是"工程经验"。
你写得多、踩坑多、重构多,自然就懂了。

强行背定义只会越学越痛苦。

相关推荐
萧瑟余晖2 小时前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
超级架构师2 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮3 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
LMT流氓兔4 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真4 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放4 小时前
Python基础语法练习题(75)
开发语言·python·学习
starzy19905 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
wangbing11255 小时前
平台介绍-modbus设备调试
java
starzy19905 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala