返回 随笔记录
三、设计模式与架构
博主
大约 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 功能