设计模式总结

设计模式之美重要内容

1、设计原则与思想

1.1、面向对象

1、面向对象的四大特性:封装、抽象、继承、多态分别可以解决哪些编程问题

2、面向对象 VS 面向过程:面向对象相比面向过程有哪些优势,面向过程真的过时了吗

3、错误的面向对象:哪些代码设计看似是面向对象,实际是面向过程的

4、接口 VS 抽象类:接口与抽象类的区别,如何用普通的类模拟抽象类和接口

5、基于接口而非实现编程:为什么基于接口而非实现编程,有必要为每个类都定义接口吗

6、组合 VS 继承:为何说要多用组合少用继承,如何决定该用组合还是继承

7、实战一(上):业务开发常用的基于贫血模型的 MVC 架构违背 OOP 吗

8、实战一(下):如何利用基于充血模型的 DDD 开发一个虚拟钱包系统

9、实战二(上):如何对接口鉴权这样一个功能开发做面向对象分析

10、实战二(下):如何利用面向对象设计和编程开发接口鉴权功能

1.2、设计原则

11、单一职责原则:如何判定一个类的职责是否够 "单一"

12、开闭原则:如何做到 "对扩展开放、对修改关闭",如何设计可扩展代码

13、里式替换(LSP):里式替换跟多态有何区别,哪些代码违背了 LSP

14、接口隔离原则:接口隔离原则有哪三种应用,原则中 "接口" 该如何理解

15、依赖倒置原则:控制反转、依赖反转、依赖注入,这三者有何区别和联系

16、KISS、YAGNI 原则:我为何说 KISS、YAGNI 原则看似简单,却经常被用错

17、不要重复自己:重复代码就一定违背 DRY 吗,如何提高代码的复用性

18、迪米特法则(LOD):如何利用迪米特法则实现 "高内聚、松耦合"

19、实战一(上):针对业务系统的开发,如何做需求分析和设计

20、实战一(下):如何实现一个遵从设计原则的积分兑换系统

21、实战二(上):针对非业务的通用框架开发,如何做需求分析和设计

22、实战二(下):如何实现一个支持各种统计规则的性能计数器

1.3、规范与重构

23、重构:什么情况下要重构、到底重构什么、又该如何重构

24、重构手段:为了保证重构不出错,有哪些非常能落地的技术手段

25、代码可测试性:什么是代码的可测试性,如何写出可测试性好的代码

26、解耦代码:如何通过封装、抽象、模块化、中间层等解耦代码

27、编程规范(上):让你最快速地改善代码质量的 20 条编程规范(上)

28、编程规范(中):让你最快速地改善代码质量的 20 条编程规范(中)

29、编程规范(下):让你最快速地改善代码质量的 20 条编程规范(下)

30、实战一(上):通过一段 ID 生成器代码,学习如何发现代码质量问题

31、实战一(下):手把手带你将 ID 生成器代码从 "能用" 重构为 "好用"

32、实战二(上):程序出错该返回啥,NULL、异常、错误码、空对象

33、实战二(下):重构 ID 生成器项目中各函数的异常处理代码

1.4、总结课

34、总结回顾:面向对象、设计原则、编程规范、重构技巧的核心要点

35、用学过的设计原则和思想完善之前讲的性能计数器项目(上)

36、用学过的设计原则和思想完善之前讲的性能计数器项目(下)

2、设计模式与范式

2.1、创建型模式

37、单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优

38、单例模式(中):我为什么不推荐使用单例模式,又有何替代方案

39、单例模式(下):如何实现多例模式和集群下的分布式单例模式

40、工厂模式(上):我为什么说没事不要随便使用工厂模式创建对象

41、工厂模式(下):如何设计实现一个 Dependency Injection 框架

42、建造者模式:如何设计实现一个简洁易用的 SQL 语句生成框架

43、原型模式:如何最快速地深度 clone 一个 HashMap 散列表

2.2、结构型模式

44、代理模式:代理模式在 RPC、缓存、监控等场景中的应用

45、桥接模式:如何实现支持不同格式和渠道的消息推送系统

46、装饰器模式:通过剖析 Java IO 类库源码来学习装饰器模式

47、适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别

48、门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性

49、组合模式:如何设计实现支持递归遍历的文件系统目录树结构

50、享元模式(上):如何利用享元模式优化文本编辑器的内存占用

51、享元模式(下):剖析享元模式在 Java Integer、String 中的应用

2.3、行为型模式

52、观察者模式(上):详解各种应用场景下观察者模式的不同实现方式

53、观察者模式(下):如何实现一个异步非阻塞的 EventBus 框架

54、模板模式(上):剖析 JDK、Servlet、Junit,学习模板模式的两大作用

55、模板模式(下):模板模式与 callback 回调函数有何区别和联系

56、策略模式(上):如何避免冗长的 if-else/switch 分支判断代码

57、策略模式(下):如何实现一个可以给不同大小文件排序的小程序

58、职责链模式(上):如何实现可灵活扩展算法的敏感信息过滤框架

59、职责链模式(下):框架中常用的过滤器、拦截器是如何实现的

60、状态模式:游戏、工作流引擎中常用的状态机是如何实现的

61、迭代器模式(上):相比直接遍历集合数据,使用迭代器有哪些优势

62、迭代器模式(中):在遍历集合的同时为什么不能增删集合元素

63、迭代器模式(下):如何设计实现一个支持 "快照" 功能的 iterator

64、访问者模式(上):手把手带你还原访问者模式诞生的思维过程

65、访问者模式(下):为什么支持双分派的语言就不需要访问者模式

66、备忘录模式:对于大对象的备份和恢复,如何优化内存和时间的消耗

67、命令模式:如何利用命令模式加轮训机制搭建手游后端架构

68、解释器模式:如何设计实现一个自定义接口告警规则功能

69、中介模式:什么时候用中介模式,什么时候用观察者模式

2.4、总结课

70、总结回顾:23种经典设计模式的原理、核心思想和应用场景

71、在实际的项目开发中,如何避免过度设计,又如何避免设计不足

3、开源项目与实战

3.1、开源实战

72、开源实战一(上):通过剖析 Java JDK 源码学习灵活应用设计模式

73、开源实战一(下):通过剖析 Java JDK 源码学习灵活应用设计模式

74、开源实战二(上):从 Unix 开源开发学习应对大型复杂项目开发

75、开源实战二(中):从 Uinx 开源开发学习应对大型复杂项目开发

76、开源实战三(下):从 Unix 开源开发学习应对大型复杂项目开发

77、开源实战三(上):借 Google Guava 学习发现和开发通用功能模块

78、开源实战三(中):剖析 Google Guava 中用到的几种设计模式

79、开源实战三(下):借 Google Guava 学习三大编程范式中的函数式编程

80、开源实战四(上):剖析 Spring 框架中蕴含的经典设计思想或原则

81、开源实战四(中):剖析 Spring 框架中用来支持扩展的两种设计模式

82、开源实战四(下):总结 Spring 框架中用到的11种设计模式

83、开源实战五(上):MyBatis 如何权衡易用性、性能和灵活性

84、开源实战五(中):如何利用职责链与代理模式实现 MyBatis Plugin

85、开源实战五(下):总结 MyBatis 框架中用到的 10 种设计模式

3.2、项目实战

86、项目实战一:设计实现一个支持各种算法的限流框架(分析)

87、项目实战一:设计实现一个支持各种算法的限流框架(设计)

88、项目实战一:设计实现一个支持各种算法的限流框架(实现)

89、项目实战二:设计实现一个通用的接口幂等框架(分析)

90、项目实战二:设计实现一个通用的接口幂等框架(设计)

91、项目实战二:设计实现一个通用的接口幂等框架(实现)

92、项目实战三:设计实现一个支持自定义规则的灰度发布组件(分析)

93、项目实战三:设计实现一个支持自定义规则的灰度发布组件(设计)

94、项目实战三:设计实现一个支持自定义规则的灰度发布组件(实现)

3.3、总结课

95、总结回顾:在实际软件开发中常用的设计原则和思想、模式和范式

96、如何将设计模式、设计原则、设计思想等理论知识应用到实战

4、图示

image

posted @ 2023-06-24 13:42  lidongdongdong~  阅读(90)  评论(0编辑  收藏  举报