人民邮电出版社有限公司店铺主页二维码
人民邮电出版社有限公司 微信认证
人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
微信扫描二维码,访问我们的微信店铺
你可以使用微信联系我们,随时随地的购物、客服咨询、查询订单和物流...

设计模式之美

49.90
运费: ¥ 0.00-20.00
设计模式之美 商品图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. 发送给朋友、分享到朋友圈、收藏

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

微信支付

支付宝

扫一扫购买

打开微信,扫一扫

或搜索微信号:renyoushe
人民邮电出版社官方微信公众号

收藏到微信 or 发给朋友

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

2. 点击右上角图标

点击右上角分享图标

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

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