设计模式应该怎么学

文章目录

  • 真正学会设计模式的正确路径(超简单)
    • [第一步:先学 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

一看源码,瞬间顿悟。

三、一句大实话

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

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

相关推荐
用户6222884048194 小时前
Redis 内存管理与过期淘汰策略:从 maxmemory 到 LRU / LFU,一篇讲透
java·redis
shuoshuohaohao4 小时前
Spring-boot-3 -注解 yaml配置 -日志
java·数据库·mysql
青春逝如流水4 小时前
Java 线程池的创建方式、注意要点与任务类型判断
java·开发语言·线程池·多线程·ai文章
徐小黑ACG4 小时前
Golang goroutine、通道、锁
开发语言·后端·golang
用户3610588626124 小时前
深入理解Scala模式匹配:结构化解构
java
开开心心_Every4 小时前
内存清理工具定时自动清理开机自启动
java·开发语言·spring·计算机外设·ocr·intellij-idea·excel
纪念 2294 小时前
c++ string(二)
开发语言·c++
李福春4 小时前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
十年Java程序媛4 小时前
Java 接口和抽象类对比|抛弃老旧八股,正确选型
java·开发语言·spring boot·后端
见叶之秋5 小时前
【C++】从基类到派生类:关于C++继承的务实梳理
开发语言·c++