设计模式总结
1、设计原则与思想
1.1、面向对象
1、面向对象的四大特性:封装、抽象、继承、多态分别可以解决哪些编程问题
2、面向对象 VS 面向过程:面向对象相比面向过程有哪些优势,面向过程真的过时了吗
3、错误的面向对象:哪些代码设计看似是面向对象,实际是面向过程的
4、接口 VS 抽象类:接口与抽象类的区别,如何用普通的类模拟抽象类和接口
5、基于接口而非实现编程:为什么基于接口而非实现编程,有必要为每个类都定义接口吗
6、组合 VS 继承:为何说要多用组合少用继承,如何决定该用组合还是继承
7、实战一(上):业务开发常用的基于贫血模型的 MVC 架构违背 OOP 吗
8、实战一(下):如何利用基于充血模型的 DDD 开发一个虚拟钱包系统
9、实战二(上):如何对接口鉴权这样一个功能开发做面向对象分析
10、实战二(下):如何利用面向对象设计和编程开发接口鉴权功能
1.2、设计原则
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、缓存、监控等场景中的应用
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、职责链模式(下):框架中常用的过滤器、拦截器是如何实现的
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、图示
本文来自博客园,作者:lidongdongdong~,转载请注明原文链接:https://www.cnblogs.com/lidong422339/p/17500980.html