极客时间商城店铺主页二维码
极客时间商城
为极致和美好付费
微信扫描二维码,访问我们的微信店铺

设计模式之美

49.90
运费: ¥ 0.00-20.00
库存: 96 件
设计模式之美 商品图0
设计模式之美 商品图1
设计模式之美 商品图2
设计模式之美 商品图3
设计模式之美 商品图4
设计模式之美 商品缩略图0 设计模式之美 商品缩略图1 设计模式之美 商品缩略图2 设计模式之美 商品缩略图3 设计模式之美 商品缩略图4

商品详情

书名:设计模式之美  
定*:99.8  
ISBN:9787**5584748  
作者:*争(@小争哥)  
版次:第*版  
出版时间:2022-06  

内容提要:  

 本书结合真实项目案例,从面向对象编程范式、设计原则、代码规范、重构技巧和设计模式5个方面详细介绍如何编写*质量代码。

  第*章为概述,简单介绍了本书涉及的各个模块,以及各个模块之间的联系;第2章介绍面向对象编程范式;第3章介绍设计原则;第4章介绍代码规范;第5章介绍重构技巧;第6章介绍*建型设计模式;第7章介绍结构型设计模式;第8章介绍行为型设计模式。

  本书可以作为各类研发工程师的学习、进*读物,也可以作为*等院校相关*业师生的教学和学习用书,以及计算机培训学校的教材。






作者简介:  

*争,前Google工程师,《数据结构与算法之美》书籍作者,热衷技术分享,gzh:小争哥。热爱分享,对数据结构、设计模式和算法有很好的的研究。

量身打造




目录:  

第 *章概述 *

*.* 为什么学习代码设计 2

*.*.* 编写*质量的代码 2

*.*.2 应对复杂代码的开发 2

*.*.3 程序员的基本功 3

*.*.4 职场发展的*备技能 4

*.*.5 思考题 4

*.2 如何评*代码质量 4

*.2.* 可维护性(maintainability) 5

*.2.2 可读性(readability) 6

*.2.3 可扩展性(extensibility) 6

*.2.4 灵活性(flexibility) 6

*.2.5 简洁性(simplicity) 7

*.2.6 可复用性(reusability) 7

*.2.7 可测试性(testability) 7

*.2.8 思考题 8

*.3 如何写出*质量代码 8

*.3.* 面向对象 8

*.3.2 设计原则 8

*.3.3 设计模式 9

*.3.4 代码规范 9

*.3.5 重构技巧 *0

*.3.6 思考题 **

*.4 如何避*过度设计  **

*.4.* 代码设计的初衷是提*代码质量 **

*.4.2 代码设计的原则是“先有问题,后有方案” *2

*.4.3 代码设计的应用场景是复杂代码 *2

*.4.4 持续重构可有效避*过度设计 *2

*.4.5 *要脱离具体的场景谈代码设计 *3

*.4.6 思考题 *3

第 2章面向对象编程范式 *4

2.* 当我们在谈论面向对象时,到底在谈论什么 *5

2.*.* 面向对象编程和面向对象编程语言 *5

2.*.2 非严格定义的面向对象编程语言 *6

2.*.3 面向对象分析和面向对象设计 *6

2.*.4 关于UML的说明 *7

2.*.5 思考题 *7

2.2 封装、抽象、继承和多态为何而生 *7

2.2.* 封装(encapsulation) *8

2.2.2 抽象(abstraction) 20

2.2.3 继承(inheritance) 2*

2.2.4 多态(polymorphism) 22

2.2.5 思考题 25

2.3 如何进行面向对象分析、面向对象设计和面向对象编程 25

2.3.* 案例介绍和难点剖析 25

2.3.2 如何进行面向对象分析 26

2.3.3 如何进行面向对象设计 28

2.3.4 如何进行面向对象编程 34

2.3.5 思考题 35

2.4 面向对象编程与面向过程编程和函数式编程之间的区别 35

2.4.* 面向过程编程 36

2.4.2 面向对象编程和面向过程编程的对比 38

2.4.3 函数式编程 40

2.4.4 面向对象编程和函数式编程的对比 44

2.4.5 思考题 44

2.5 哪些代码看似面向对象编程风格,实则面向过程编程风格 45

2.5.* 滥用getter、setter方法 45

2.5.2 滥用*局变量和*局方法 47

2.5.3 定义数据和方法分离的类 49

2.5.4 思考题 50

2.6 基于“贫血”模型的传统开发模式是否违背OOP 5*

2.6.* 基于“贫血”模型的传统开发模式 5*

2.6.2 基于“充血”模型的DDD开发模式 52

2.6.3 两种开发模式的应用对比 53

2.6.4 基于“贫血”模型的传统开发模式被广泛应用的原因 57

2.6.5 基于“充血”模型的DDD开发模式的应用场景 58

2.6.6 思考题 59

2.7 接口和抽象类:如何使用普通类模拟接口和抽象类 59

2.7.* 抽象类和接口的定义与区别 59

2.7.2 抽象类和接口存在的意义 62

2.7.3 模拟实现抽象类和接口 64

2.7.4 抽象类和接口的应用场景 65

2.7.5 思考题 65

2.8 基于接口而非实现编程:有没有*要为每个类*定义接口 65

2.8.* 接口的多种理解方式 66

2.8.2 设计思想实战应用 66

2.8.3 避*滥用接口 69

2.8.4 思考题 69

2.9 组合*于继承:什么情况下可以使用继承 70

2.9.* 为什么*推荐使用继承 70

2.9.2 相比继承,组合有哪些*势 72

2.9.3 如何决定是使用组合还是使用继承 73

2.9.4 思考题 74


第3章设计原则 75

3.* 单*职责原则:如何判定某个类的职责是否单* 76

3.*.* 单*职责原则的定义和解读 76

3.*.2 如何判断类的职责是否单* 76

3.*.3 类的职责是否越细化越好 78

3.*.4 思考题 79

3.2 开闭原则:只要修改代码,**定违反开闭原则吗 79

3.2.* 如何理解“对扩展开放、对修改关闭” 80

3.2.2 修改代码*意味着违反开闭原则吗 83

3.2.3 如何做到“对扩展开放、对修改关闭” 84

3.2.4 如何在项目中灵活应用开闭原则 85

3.2.5 思考题 86

3.3 里氏替换原则:什么样的代码才算违反里氏替换原则 86

3.3.* 里氏替换原则的定义 86

3.3.2 里氏替换原则与多态的区别 88

3.3.3 违反里氏替换原则的反模式 89

3.3.4 思考题 89

3.4 接口隔离原则:如何理解该原则中的“接口” 89

3.4.* 把“接口”理解为*组API或函数 90

3.4.2 把“接口”理解为单个API或函数 9*

3.4.3 把“接口”理解为OOP中的接口概念 92

3.4.4 思考题 96

3.5 依赖反转原则:依赖反转与控制反转、依赖注入有何关系 97

3.5.* 控制反转(IoC) 97

3.5.2 依赖注入(DI) 98

3.5.3 依赖注入框架(DI Framework) 99

3.5.4 依赖反转原则(DIP) *00

3.5.5 思考题 *00

3.6 KISS原则和YAGNI原则:二者是*回事吗 *00

3.6.* KISS原则的定义和解读 *0*

3.6.2 代码并非行数越少越简单 *0*

3.6.3 代码复杂**定违反KISS原则 *03

3.6.4 如何写出满足KISS原则的代码 *04

3.6.5 YAGNI原则和KISS原则的区别 *04

3.6.6 思考题 *04

3.7 DRY原则:相同的两段代码**定违反DRY原则吗 *04

3.7.* 代码逻辑重复 *05

3.7.2 功能(语义)重复 *06

3.7.3 代码执行重复 *07

3.7.4 代码的复用性 *09

3.7.5 思考题 **0

3.8 LoD:如何实现代码的“*内聚、低耦合” **0

3.8.* 何为“*内聚、低耦合” **0

3.8.2 LoD的定义描述 ***

3.8.3 定义解读与代码示例* **2

3.8.4 定义解读与代码示例二 **4

3.8.5 思考题 **6

第4章代码规范 **7

4.* 命名与注释:如何*准命名和编写注释 **8

4.*.* 长命名和短命名哪个更好 **8

4.*.2 利用上下文信息简化命名 **8

4.*.3 利用业务词汇表统*命名 **8

4.*.4 命名既要*准又要抽象 **9

4.*.5 注释应该*含哪些内容 **9

4.*.6 注释并非越多越好 *20

4.*.7 思考题 *20

4.2 代码风格:与其争论标准,*如团队统* *2*

4.2.* 类、函数多大才合适 *2*

4.2.2 *行代码多长才合适 *2*

4.2.3 善用空行分割代码块 *2*

4.2.4 是四格缩进还是两格缩进 *22

4.2.5 左大括号是否要另起*行 *22

4.2.6 类中成员的排列顺序 *22

4.2.7 思考题 *23

4.3 编程技巧:小技巧,大作用,*招提*代码的可读性 *23

4.3.* 将复杂的代码模块化 *23

4.3.2 避*函数的参数过多 *24

4.3.3 移除函数中的flag参数 *25

4.3.4 移除嵌套过深的代码 *26

4.3.5 学会使用解释性变量 *28

4.3.6 思考题 *29

第5章重构技巧 *30

5.* 重构四要素:目的、对象、时机和方法 *3*

5.*.* 重构的目的:为什么重构(why) *3*

5.*.2 重构的对象:到底重构什么(what) *3*

5.*.3 重构的时机:什么时候重构(when) *32

5.*.4 重构的方法:应该如何重构(how) *32

5.*.5 思考题 *33

5.2 单元测试:*证重构*出错的有效手段 *33

5.2.* 什么是单元测试 *33

5.2.2 为什么要编写单元测试代码 *35

5.2.3 如何设计单元测试 *36

5.2.4 为什么单元测试落地困难 *38

5.2.5 思考题 *39

5.3 代码的可测试性:如何编写可测试代码 *39

5.3.* 编写可测试代码的方法 *39

5.3.2 常见*可测试代码示例 *46

5.3.3 思考题 *47

5.4 解耦:哪些方法可以用来解耦代码 *47

5.4.* 为何解耦如此重要 *47

5.4.2 如何判断代码是否需要解耦 *48

5.4.3 如何给代码解耦 *48

5.4.4 思考题 *50

5.5 重构案例:将ID生成器代码从“能用”重构为“好用” *50

5.5.* ID生成器需求背景 *50

5.5.2 “凑合能用”的代码实现 *5*

5.5.3 如何发现代码的质量问题 *52

5.5.4 第 *轮重构:提*代码的可读性 *53

5.5.5 第二轮重构:提*代码的可测试性 *55

5.5.6 第三轮重构:编写单元测试代码 *56

5.5.7 第四轮重构:重构异常处理逻辑 *58

5.5.8 思考题 *65

第6章*建型设计模式 *66

6.* 单例模式(上):为什么*推荐在项目中使用单例模式 *67

6.*.* 单例模式的定义 *67

6.*.2 单例模式的实现方法 *67

6.*.3 单例模式的应用:日志写入 *70

6.*.4 单例模式的弊端 *73

6.*.5 单例模式的替代方案 *75

6.*.6 思考题 *76

6.2 单例模式(下):如何设计实现*个分布式单例模式 *77

6.2.* 单例模式的唯*性 *77

6.2.2 线程唯*的单例模式 *77

6.2.3 集群环境下的单例模式 *78

6.2.4 多例模式 *79

6.2.5 思考题 *80

6.3 工厂模式(上):如何解耦复杂对象的*建和使用 *80

6.3.* 简单工厂模式(Simple Factory Pattern) *8*

6.3.2 工厂方法模式(Factory Method Pattern) *83

6.3.3 抽象工厂模式(Abstract Factory Pattern) *86

6.3.4 工厂模式的应用场景总结 *87

6.3.5 思考题 *87

6.4 工厂模式(下):如何设计实现*个依赖注入容器 *88

6.4.* DI容器与工厂模式的区别 *88

6.4.2 DI容器的核心功能 *88

6.4.3 DI容器的设计与实现 *90

6.4.4 思考题 *94

6.5 建造者模式:什么情况下*须用建造者模式*建对象 *94

6.5.* 使用构造函数*建对象 *94

6.5.2 使用setter方法为成员变量赋值 *95

6.5.3 使用建造者模式做参数校验 *96

6.5.4 建造者模式在Guava中的应用 *98

6.5.5 建造者模式与工厂模式的区别 200

6.5.6 思考题 200

6.6 原型模式:如何快速复制(clone)*个哈希表 200

6.6.* 原型模式的定义 200

6.6.2 原型模式的应用举例 20*

6.6.3 原型模式的实现方式:深拷贝和浅拷贝 203

6.6.4 思考题 206

第7章结构型设计模式 208

7.* 代理模式:代理模式在RPC、缓存和监控等场景中的应用 209

7.*.* 基于接口实现代理模式 209

7.*.2 基于继承实现代理模式 2**

7.*.3 基于反射实现动态代理 2**

7.*.4 代理模式的各种应用场景 2*2

7.*.5 思考题 2*3

7.2 装饰器模式:剖析Java IO类库的底层设计思想 2*3

7.2.* Java IO类库的“奇怪”用法 2*3

7.2.2 基于继承的设计方案 2*5

7.2.3 基于装饰器模式的设计方案 2*5

7.2.4 思考题 2*9

7.3 适配器模式:如何利用适配器模式解决代码的*兼容问题 2*9

7.3.* 类适配器和对象适配器 2*9

7.3.2 适配器模式的5种应用场景 22*

7.3.3 适配器模式在Java日志中的应用 224

7.3.4 Wrapper设计模式 226

7.3.5 思考题 230

7.4 桥接模式:如何将M×N的继承关系简化为M+N的组合关系 230

7.4.* 桥接模式的定义 230

7.4.2 桥接模式解决继承“*炸”问题 230

7.4.3 思考题 23*

7.5 门面模式:如何设计接口以兼顾接口的易用性和通用性 23*

7.5.* 门面模式和接口设计 23*

7.5.2 利用门面模式提*接口易用性 232

7.5.3 利用门面模式提*接口性能 232

7.5.4 利用门面模式解决事务问题 232

7.5.5 思考题 233

7.6 组合模式:*种应用在树形结构上的*殊设计模式 233

7.6.* 组合模式的应用*:目录树 233

7.6.2 组合模式的应用二:人力树 237

7.6.3 思考题 239

7.7 享元模式:如何利用享元模式降低系统的内存开销 239

7.7.* 享元模式在棋牌游戏中的应用 239

7.7.2 享元模式在文本编辑器中的应用 242

7.7.3 享元模式在Java Integer中的应用 244

7.7.4 享元模式在Java String中的应用 247

7.7.5 享元模式与单例模式、缓存、对象池的区别 248

7.7.6 思考题 248

第8章行为型设计模式 249

8.* 观察者模式:如何实现*个异步非阻塞的EventBus框架 250

8.*.* 观察者模式的定义 250

8.*.2 观察者模式的代码实现 250

8.*.3 观察者模式存在的意义 25*

8.*.4 观察者模式的应用场景 253

8.*.5 异步非阻塞观察者模式 254

8.*.6 EventBus框架功能介绍 255

8.*.7 从零开始实现EventBus框架 257

8.*.8 思考题 26*

8.2 模板方法模式(上):模板方法模式在JDK、Servlet、JUnit中的应用 26*

8.2.* 模板方法模式的定义与实现 26*

8.2.2 模板方法模式的作用*:复用 262

8.2.3 模板方法模式的作用二:扩展 264

8.2.4 思考题 266

8.3 模板方法模式(下):模板方法模式与回调有何区别和联系 267

8.3.* 回调的原理与实现 267

8.3.2 应用示例*:JdbcTemplate 268

8.3.3 应用示例二:setClickListener() 270

8.3.4 应用示例三:addShutdownHook() 27*

8.3.5 模板方法模式与回调的区别 272

8.3.6 思考题 273

8.4 策略模式:如何避*冗长的if-else和switch-case语句 273

8.4.* 策略模式的定义与实现 273

8.4.2 利用策略模式替代分支判断 275

8.4.3 策略模式的应用举例:对文件中的内容进行排序 277

8.4.4 避*策略模式误用 28*

8.4.5 思考题 28*

8.5 职责链模式:框架中的过滤器、拦截器和插件是如何实现的 282

8.5.* 职责链模式的定义和实现 282

8.5.2 职责链模式在敏感词过滤中的应用 286

8.5.3 职责链模式在Servlet Filter中的应用 288

8.5.4 职责链模式在Spring Interceptor中的应用 290

8.5.5 职责链模式在MyBatis Plugin中的应用 293

8.5.6 思考题 297

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

8.6.* 什么是有限状态机 298

8.6.2 状态机实现方式*:分支判断法 300

8.6.3 状态机实现方式二:查表法 30*

8.6.4 状态机实现方式三:状态模式 303

8.6.5 思考题 306

8.7 迭代器模式(上):为什么要用迭代器遍历集合 306

8.7.* 迭代器模式的定义和实现 307

8.7.2 遍历集合的3种方法 309

8.7.3 迭代器遍历集合的问题 3*0

8.7.4 迭代器遍历集合的问题的解决方案 3**

8.7.5 思考题 3*5

8.8 迭代器模式(下):如何实现*个支持快照功能的迭代器 3*5

8.8.* 支持快照功能的迭代器 3*5

8.8.2 设计思路*:基于多副本 3*6

8.8.3 设计思路二:基于时间戳 3*7

8.8.4 思考题 3*9

8.9 访问者模式:为什么支持双分派的编程语言*需要访问者模式 320

8.9.* “发明”访问者模式 320

8.9.2 双分派(Double Dispatch) 328

8.9.3 思考题 330

8.*0 备忘录模式:如何*雅地实现数据*丢失、撤销和恢复功能 330

8.*0.* 备忘录模式的定义与实现 33*

8.*0.2 *化备忘录模式的时间和空间开销 333

8.*0.3 思考题 334

8.** 命令模式:如何设计实现基于命令模式的手游服务器 334

8.**.* 命令模式的定义 334

8.**.2 命令模式的应用:手游服务器 335

8.**.3 命令模式与策略模式的区别 336

8.**.4 思考题 337

8.*2 解释器模式:如何设计实现*个自定义接口告警规则的功能 337

8.*2.* 解释器模式的定义 337

8.*2.2 解释器模式的应用:表达式计算 337

8.*2.3 解释器模式的应用:规则引擎 340

8.*2.4 思考题 343


极客时间商城店铺主页二维码
极客时间商城
为极致和美好付费
扫描二维码,访问我们的微信店铺

设计模式之美

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏