返回 随笔记录
随笔记录

三、设计模式与架构

博主
大约 15 分钟

三、设计模式与架构

范围:创建型/结构型/行为型模式、SOLID原则、DDD、重构技巧、企业架构 知识点数量:289项 返回总目录


3.1 创建型模式

3.1.1 单例模式

  • 292. 饿汉式单例 - 掌握类加载时实例化,理解线程安全机制
  • 293. 懒汉式单例(synchronized) - 掌握延迟加载,理解性能瓶颈
  • 294. 双重检查锁定(DCL) - 掌握volatile作用,理解指令重排问题
  • 295. 静态内部类单例 - 掌握类加载机制保证线程安全,理解懒汉特性
  • 296. 枚举单例 - 掌握枚举防反射攻击,理解最佳实践
  • 297. 单例序列化问题 - 理解readResolve方法防止反序列化破坏单例
  • 298. 单例破坏与反射攻击 - 掌握防御策略,理解AccessController
  • 299. 容器单例 - 掌握Spring IoC容器中的单例实现
  • 300. 多例模式 - 掌握EnumMap实现多例管理
  • 301. 线程本地单例 - 掌握ThreadLocal实现线程级别单例
  • 302. 单例测试陷阱 - 掌握单元测试中单例状态清理

3.1.2 工厂模式

  • 303. 简单工厂 - 掌握静态工厂方法,理解违反开闭原则问题
  • 304. 工厂方法模式 - 掌握子类决定实例化,理解扩展性优势
  • 305. 抽象工厂模式 - 掌握产品族创建,理解接口依赖倒置
  • 306. Spring BeanFactory - 理解工厂模式在框架中的应用
  • 307. 工厂模式重构案例 - 掌握消除if-else的技巧
  • 308. 配置化工厂 - 掌握动态创建策略,理解反射工厂
  • 309. 泛型工厂 - 掌握类型安全工厂设计
  • 310. 工厂注册表 - 掌握动态注册工厂实例
  • 311. 抽象工厂扩展 - 掌握新产品族添加不影响现有代码
  • 312. 工厂+反射组合 - 掌握配置文件驱动创建对象

3.1.3 建造者与原型

  • 313. 建造者模式 - 掌握链式调用,理解参数过多场景
  • 314. Lombok @Builder - 掌握自动生成建造者,理解自定义属性
  • 315. 原型模式 - 掌握clone方法,理解深浅拷贝区别
  • 316. Cloneable接口 - 理解标记接口,掌握实现细节
  • 317. 序列化实现深拷贝 - 掌握替代clone的方案,理解性能对比
  • 318. 原型注册表 - 掌握动态原型管理,理解原型池
  • 319. 不可变对象建造 - 掌握final字段建造者设计
  • 320. 验证型建造者 - 掌握建造过程中参数校验
  • 321. 指导性建造者 - 掌握Director控制建造流程
  • 322. 原型克隆性能 - 理解浅拷贝性能优势,掌握适用场景

3.2 结构型模式

3.2.1 代理模式

  • 323. 静态代理 - 掌握手动创建代理,理解代码膨胀问题
  • 324. JDK动态代理 - 掌握Proxy.newProxyInstance,理解InvocationHandler
  • 325. CGLIB代理 - 掌握MethodInterceptor,理解子类继承限制
  • 326. Spring AOP代理选择 - 理解JDK vs CGLIB决策机制
  • 327. 代理模式应用 - 掌握事务、日志、权限等场景
  • 328. ByteBuddy代理 - 掌握现代代理库使用,理解性能优势
  • 329. 虚拟代理 - 掌握延迟加载大对象
  • 330. 保护代理 - 掌握访问控制实现
  • 331. 智能引用代理 - 掌握引用计数、锁机制
  • 332. 远程代理 - 理解RPC框架中的代理实现
  • 333. 缓存代理 - 掌握结果缓存实现,理解缓存失效策略

3.2.2 适配器与装饰器

  • 334. 适配器模式 - 掌握接口转换,理解类适配和对象适配
  • 335. 装饰器模式 - 掌握动态添加职责,理解IO流设计
  • 336. Java IO装饰器链 - 理解BufferedInputStream套接设计
  • 337. Spring Session装饰器 - 理解HttpServletRequest包装
  • 338. 外观模式 - 掌握子系统接口简化,理解门面设计
  • 339. 桥接模式 - 掌握抽象与实现分离,理解多维变化
  • 340. 适配器vs装饰器 - 理解两者区别,掌握选择策略
  • 341. 多层装饰器 - 掌握装饰器链顺序问题
  • 342. 装饰器状态管理 - 理解装饰器与底层对象状态同步

3.2.3 组合与享元

  • 343. 组合模式 - 掌握树形结构,理解统一访问接口
  • 344. 菜单树实现 - 掌握递归组合,理解遍历优化
  • 345. 享元模式 - 掌握对象共享,理解String常量池原理
  • 346. 对象池 - 掌握连接池、线程池原理,理解池化技术
  • 347. 代理+享元组合 - 掌握虚拟代理优化
  • 348. 组合遍历优化 - 掌握迭代器+组合模式
  • 349. 透明vs安全组合 - 理解接口设计权衡
  • 350. 享元工厂 - 掌握内部/外部状态分离
  • 351. 享元线程安全 - 理解享元对象不可变性要求

3.3 行为型模式

3.3.1 观察者与策略

  • 352. 观察者模式 - 掌握主题-订阅者,理解EventBus实现
  • 353. Spring ApplicationEvent - 掌握框架事件机制,理解@EventListener
  • 354. 策略模式 - 掌握算法封装,理解消除if-else技巧
  • 355. 策略+工厂组合 - 掌握动态策略选择,理解策略注册
  • 356. Comparator策略应用 - 掌握排序策略,理解策略链
  • 357. 线程池拒绝策略 - 理解策略模式应用,掌握4种内置策略
  • 358. 观察者线程安全 - 掌握并发环境下的通知机制
  • 359. 弱引用观察者 - 理解内存泄漏预防
  • 360. 策略配置化 - 掌握配置文件驱动策略选择
  • 361. 策略模式vs状态模式 - 理解两者区别,掌握适用场景

3.3.2 责任链与命令

  • 362. 责任链模式 - 掌握请求传递,理解Filter链设计
  • 363. Spring Security Filter链 - 理解安全过滤器执行顺序
  • 364. Servlet Filter - 掌握Web过滤器实现,理解FilterChain
  • 365. 命令模式 - 掌握请求封装,理解撤销/重做操作
  • 366. 命令队列 - 掌握异步命令处理,理解日志命令
  • 367. 宏命令 - 掌握命令组合,理解批量执行
  • 368. 责任链终止条件 - 掌握处理成功/失败链终止
  • 369. 动态责任链 - 掌握运行时组装责任链
  • 370. 命令模式事务 - 理解命令回滚机制
  • 371. 命令模式vs策略模式 - 理解意图区别

3.3.3 模板方法与状态

  • 372. 模板方法模式 - 掌握算法骨架,理解钩子方法设计
  • 373. AbstractQueuedSynchronizer - 理解JUC中的模板方法应用
  • 374. 状态模式 - 掌握状态转换,理解消除条件语句
  • 375. 状态机实现 - 掌握Spring Statemachine,理解状态定义
  • 376. 工作流引擎 - 理解Activiti/Flowable状态管理
  • 377. 状态模式重构 - 掌握订单状态管理案例
  • 378. 模板方法vs策略 - 理解继承vs组合的区别
  • 379. 状态转换表 - 掌握表格驱动状态机
  • 380. 并发状态机 - 理解线程安全状态转换

3.3.4 迭代器与中介者

  • 381. 迭代器模式 - 掌握Collection迭代,理解内部迭代器
  • 382. Spliterator - 掌握Java 8分割迭代器,理解并行流
  • 383. 中介者模式 - 掌握对象通信简化,理解MVC控制器
  • 384. 备忘录模式 - 掌握状态保存,理解撤销实现
  • 385. 访问者模式 - 掌握双重分派,理解数据结构与操作分离
  • 386. 解释器模式 - 掌握语法树解析,理解SQL解析应用
  • 387. 迭代器失效 - 理解ConcurrentModificationException
  • 388. 访问者模式扩展 - 掌握新操作添加不影响数据结构
  • 389. 备忘录压缩 - 掌握状态快照优化
  • 390. 中介者模式vs观察者 - 理解集中式vs分布式通信

3.4 架构原则

3.4.1 SOLID原则

  • 391. 单一职责原则(SRP) - 掌握类职责划分,理解变化来源分析
  • 392. 开闭原则(OCP) - 掌握扩展开放、修改关闭,理解抽象设计
  • 393. 里氏替换原则(LSP) - 理解子类替换规则,掌握契约设计
  • 394. 接口隔离原则(ISP) - 掌握接口细化,理解胖接口拆分
  • 395. 依赖倒置原则(DIP) - 掌握面向接口编程,理解控制反转
  • 396. 组合优于继承 - 理解继承的脆弱性,掌握委托设计
  • 397. 最少知识原则(LoD) - 掌握迪米特法则,理解降低耦合
  • 398. SOLID综合应用 - 掌握多原则协同设计
  • 399. SOLID违反识别 - 掌握代码坏味道与原则对应
  • 400. 原则权衡 - 理解原则冲突时的取舍策略

3.4.2 DDD领域驱动

  • 401. DDD战略设计 - 掌握限界上下文、上下文映射模式
  • 402. 领域模型 - 掌握实体、值对象、聚合根设计
  • 403. 仓储模式 - 掌握Repository抽象,理解集合语义
  • 404. 领域事件 - 掌握事件发布订阅,理解事件溯源
  • 405. 应用服务 - 掌握用例编排,理解事务边界
  • 406. 六边形架构 - 掌握端口与适配器,理解内外隔离
  • 407. CQRS - 掌握命令查询职责分离,理解读写模型
  • 408. Event Sourcing - 掌握事件持久化,理解状态重建
  • 409. 聚合设计原则 - 掌握聚合边界划分,理解一致性边界
  • 410. 值对象设计 - 掌握不可变对象,理解相等性判断
  • 411. 领域服务 - 掌握跨聚合业务逻辑,理解无状态设计
  • 412. 反腐层 - 掌握遗留系统集成,理解模型转换
  • 413. 上下文映射模式 - 掌握共享内核、客户供应商等模式
  • 414. 领域事件一致性 - 掌握最终一致性实现
  • 415. 测试驱动建模 - 掌握BDD与领域建模结合
  • 416. DDD战术设计 - 掌握实体、值对象、领域服务、应用服务分层

3.4.3 架构风格

  • 417. 分层架构 - 掌握Controller-Service-DAO分层职责
  • 418. 微服务架构 - 掌握服务拆分原则,理解领域边界
  • 419. 事件驱动架构 - 掌握消息解耦,理解异步通信
  • 420. 服务网格 - 理解Istio架构,掌握Sidecar模式
  • 421. Serverless架构 - 掌握FaaS和BaaS,理解冷启动问题
  • 422. 响应式架构 - 掌握Reactor模式,理解背压机制
  • 423. 整洁架构 - 掌握依赖规则,理解 concentric circles
  • 424. 洋葱架构 - 掌握领域核心层,理解依赖向内
  • 425. 组件化架构 - 掌握高内聚低耦合组件设计
  • 426. 插件化架构 - 掌握SPI机制,理解扩展点设计
  • 427. 架构演进 - 掌握单体到微服务的渐进式演进

3.5 重构技巧

3.5.1 代码坏味道

  • 428. 重复代码 - 掌握Extract Method重构,理解DRY原则
  • 429. 过长方法 - 掌握方法拆分策略,理解单一抽象级别
  • 430. 过大类 - 掌握Extract Class重构,理解职责分离
  • 431. 过长参数列表 - 掌握引入参数对象,理解数据聚类
  • 432. 发散式变化 - 掌握职责分离,理解内聚性提升
  • 433. 霰弹式修改 - 掌握Move Method重构,理解内聚性
  • 434. 依恋情结 - 掌握方法迁移,理解数据与行为绑定
  • 435. 数据泥团 - 掌握Extract Class重构,理解数据封装
  • 436. 开关语句 - 掌握多态替换switch,理解策略模式
  • 437. 并行继承体系 - 掌握合并继承树,理解移动方法
  • 438. 冗余类 - 掌握Inline Class重构,理解内联策略
  • 439. 夸夸其谈未来性 - 掌握YAGNI原则,理解过度设计

3.5.2 重构手法

  • 440. Extract Method - 掌握方法提取,理解局部变量处理
  • 441. Inline Method - 掌握方法内联,理解简化调用链
  • 442. Move Method - 掌握方法迁移,理解依赖分析
  • 443. Replace Temp with Query - 掌握临时变量替换,理解方法提取
  • 444. Replace Conditional with Polymorphism - 掌握多态替换条件
  • 445. Introduce Parameter Object - 掌握参数对象化,理解数据聚类
  • 446. Replace Magic Number with Symbolic Constant - 掌握常量提取
  • 447. Encapsulate Collection - 掌握集合封装,理解不可变视图
  • 448. Extract Interface - 掌握接口提取,理解抽象设计
  • 449. Safe Delete - 掌握安全删除,理解引用分析
  • 450. Extract Subclass - 掌握子类提取,理解特化设计
  • 451. Extract Superclass - 掌握超类提取,理解共性抽取
  • 452. Collapse Hierarchy - 掌握继承树扁平化
  • 453. Replace Inheritance with Delegation - 掌握委托替换继承
  • 454. Replace Delegation with Inheritance - 掌握继承替换委托
  • 455. Form Template Method - 掌握模板方法形成

3.5.3 重构工具与实践

  • 456. IDE重构功能 - 掌握IntelliJ重构工具,理解安全重构
  • 457. 重构与测试 - 掌握TDD保障重构安全,理解测试覆盖
  • 458. 代码审查 - 掌握CR流程和工具,理解审查清单
  • 459. 技术债务管理 - 掌握债务识别和偿还,理解债务量化
  • 460. 遗留代码重构 - 掌握绞杀者模式,理解渐进式替换
  • 461. 重构度量 - 掌握SonarQube指标,理解代码质量门禁
  • 462. 重构案例实战 - 掌握实际项目重构经验,理解风险控制
  • 463. 重构与CI集成 - 掌握自动化代码质量检查
  • 464. 重构安全策略 - 掌握小步提交、频繁测试
  • 465. 重构与性能 - 理解重构对性能的影响,掌握平衡策略

3.6 企业架构模式

3.6.1 数据源架构

  • 466. 数据映射器 - 掌握ORM设计模式,理解对象-关系映射
  • 467. 活动记录 - 理解Rails式ORM,掌握ActiveRecord模式
  • 468. 表数据入口 - 掌握行级访问封装,理解SQL集中管理
  • 469. 行数据入口 - 掌握单行封装,理解记录级操作
  • 470. 事务脚本 - 掌握过程式业务逻辑,理解简单场景适用
  • 471. 工作单元 - 掌握UoW模式,理解事务边界管理
  • 472. 数据源层选择 - 掌握不同模式适用场景

3.6.2 对象-关系行为

  • 473. 标识映射 - 掌握对象唯一性保证,理解一级缓存
  • 474. 延迟加载 - 掌握代理延迟和集合延迟,理解N+1问题
  • 475. 预加载 - 掌握EAGER加载策略,理解JOIN FETCH
  • 476. 脏检查 - 掌握变更检测机制,理解快照对比
  • 477. 级联操作 - 掌握级联保存和删除,理解级联策略
  • 478. 乐观锁 - 掌握@Version实现,理解版本号机制
  • 479. 悲观锁 - 掌握SELECT FOR UPDATE,理解锁升级
  • 480. 对象图导航 - 掌握关联关系遍历,理解性能影响
  • 481. 继承映射策略 - 掌握SINGLE_TABLE、JOINED、TABLE_PER_CLASS

3.6.3 并发与分布式

  • 482. 两阶段提交 - 理解分布式事务,掌握XA协议
  • 483. 补偿事务 - 掌握最终一致性,理解业务补偿逻辑
  • 484. Saga模式 - 掌握长事务编排,理解协调器设计
  • 485. CQRS实现 - 掌握读写分离,理解命令/查询模型
  • 486. 事件溯源实现 - 掌握状态重建,理解事件版本化
  • 487. Outbox模式 - 掌握可靠消息投递,理解事务+消息
  • 488. TCC模式 - 掌握Try-Confirm-Cancel,理解柔性事务
  • 489. 分布式锁 - 掌握Redis/ZooKeeper实现,理解红锁算法
  • 490. 幂等性设计 - 掌握重复请求处理,理解唯一键+重试

3.6.4 架构治理

  • 491. 架构决策记录 - 掌握ADR文档化,理解决策追溯
  • 492. 架构适应度函数 - 掌握架构约束验证
  • 493. 架构可视化 - 掌握C4模型,理解架构图分层
  • 494. 架构度量 - 掌握耦合度、内聚度、复杂度度量
  • 495. 架构演进策略 - 掌握渐进式演进,理解绞杀者模式
  • 496. 架构评审 - 掌握ATAM评估方法,理解风险识别
  • 497. 技术雷达 - 掌握技术评估框架,理解采纳/试验/评估/暂缓
  • 498. 架构守护 - 掌握ArchUnit,理解架构约束代码化

进度统计

  • 领域:设计模式与架构
  • 知识点总数:289项
  • 已完成:0项
  • 待完成:289项

实战项目建议

  • 项目1:设计模式实战库 - 实现23种GoF设计模式的完整示例,包含场景说明、UML图、代码实现
  • 项目2:重构演练平台 - 提供带坏味道的代码仓库,逐步重构并对比前后差异
  • 项目3:DDD电商系统 - 使用领域驱动设计实现电商核心领域,包含限界上下文划分、聚合设计
  • 项目4:状态机引擎 - 实现可配置的状态机引擎,支持状态转换规则定义、事件驱动

常见面试问题

  • 单例模式有几种实现方式?双重检查锁定为什么要用volatile?
  • 动态代理JDK和CGLIB的区别?Spring如何选择?
  • 策略模式和状态模式有什么区别?
  • DDD中实体和值对象的区别?聚合边界如何划分?
  • 什么是代码坏味道?举出3种以上并说明重构方法
  • 如何保证重构的安全性?

推荐学习资源

  • 书籍:《设计模式:可复用面向对象软件的基础》《重构:改善既有代码的设计》《领域驱动设计》
  • 视频:极客时间《设计模式之美》《架构实战》
  • 工具:IntelliJ IDEA重构功能、ArchUnit、SonarQube

返回总目录

知识点测试

读完文章了?来测试一下你对知识点的掌握程度吧!

评论区

使用 GitHub 账号登录后即可发表评论,支持 Markdown 格式。

如果评论系统无法加载,请确保:

  • 您的网络可以访问 GitHub
  • giscus GitHub App 已安装到仓库
  • 仓库已启用 Discussions 功能