《Java设计模式及实践》

举报
华章计算机 发表于 2019/07/21 22:18:16 2019/07/21
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

Java核心技术系列

Java设计模式及实践

Design Patterns and Best Practices in Java

Java设计模式及实践 立.jpg

  [印度] 卡马尔米特·辛格(Kamalmeet Singh)

  [荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著

[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje)

张小坤 黄 凯 贺 涛 译

 

 

 

 


 

 

The Translator’s Words 

译 者 序




设计模式(design pattern)是前辈的经验积累,是软件开发人员解决软件开发过程中的一般问题的通用方案,能够帮助提高代码的可重用性,增强系统的可维护性,快速地解决开发过程中常见的诸多难题。从四人组(即Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)的经典著作《设计模式》,到市面上各式各样的讲述设计模式的出版物,相信读者已经读过不少。本书的特点是理论与实践相结合,在讲述理论知识的基础上,提供了大量的设计模式实现源码,为你提供良好的Java实践。本书的另一大特色是详细阐述了Java语言的最新版本所引入的特性,并针对其在经典设计模式中的应用进行了探索。

本书可分为四部分。第一部分(第1章)主要介绍了面向对象编程的基本概念和设计模式的基本原则;第二部分(第2~4章)分别介绍了创建型、行为型、结构型三类设计模式,阐述了各种设计模式的概念、实现方式以及适用范围;第三部分(第5~7章)主要介绍了函数式编程及响应式编程的基本概念和应用实现;第四部分(第8和9章)主要介绍了常见的应用架构及其发展趋势,以及Java新版本所引入的功能特性。

参加本书翻译工作的有张小坤、黄凯、贺涛,全书由黄凯审校。在翻译过程中,感谢刘锋先生对一些专业词汇提供了规范性的解释。

由于书中概念术语繁多,且有许多概念和术语目前尚无标准的中文译法,加之译者水平有限,译文中难免有不当之处,恳请读者批评指正。

 

译者

2019年2月

 

 

 

 

Preface

前  言 

借助设计模式,开发者可以改进代码库,提高代码可重用性,并使技术架构更加健壮。随着编程语言的不断发展,新的语言特性在得到广泛应用之前往往需要大量时间去理解。本书旨在降低接受最新趋势的难度,为开发人员提供良好的实例。

本书的目标读者

本书适用于每一位有意愿编写高质量代码的Java开发人员。本书讲述了很多开发者在编码时经常疏忽的最佳实践。书中涵盖了许多设计模式,这些设计模式经开发团队实践和测试过,是用来解决特定问题的最佳方案。

本书内容

第1章介绍了Java语言不同的编程范式。

第2章介绍了多种设计模式中的创建型模式,讲述了多种类型的创建型设计模式。

第3章介绍了行为型设计模式,主要解析了多种用来管理代码和对象行为的设计模式。

第4章介绍了结构型设计模式,详细解析了用于管理对象结构的设计模式。

第5章向读者介绍了函数式编程及与之相关的设计模式。

第6章通过实例介绍了响应式编程及其Java实现。

第7章进一步探索了响应式编程的核心内容及与之相关的设计模式。

第8章从MVC架构到微服务和无服务器应用,探索了近年来开发者尝试和测试过的多种架构模式。

第9章介绍了Java的历史、最佳实践和最新版Java中的更新,并在最后表达了作者对Java未来的期待。

如何充分利用本书

拥有Java开发经验者将能从本书中获益良多,推荐读者在阅读过程中探索并充分实践各章中提供的示例代码。

下载示例代码及彩***像

本书的示例代码及所有截图和图表,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。

 

 

 

 

  About the Authors

关于作者  

Kamalmeet Singh在15岁时第一次尝试了编程并立刻爱上了它。他在获得信息技术学士学位之后加入了一家创业公司,在那里进一步提升了对Java编程的热爱之情。IT行业13年的工作经验,以及在不同的公司、国家和领域的沉淀,使他成长为一名王牌开发人员和技术架构师。他使用的技术包括云计算、机器学习、增强现实、无服务器应用程序、微服务等,但他的最爱仍然是Java。

我要感谢我的妻子Gundeep,她总是鼓励我接受新的挑战,把最好的留给我。

Adrian Ianculescu是一名拥有20年编程经验的软件开发人员,其中12年使用Java,从C ++开始,然后使用C#,最后自然地转向Java。Adrian在2~40人的团队中工作,他意识到开发软件不仅仅是编写代码,而对以不同的方法和框架设计软件和架构产生了兴趣。在公司工作一段时间之后,他开始转变为自由职业者和企业家,以追随他童年时代的梦想——制作游戏。

Lucian-Paul Torje是一名有抱负的软件工匠,在软件行业工作了近15年,几乎对所有与技术有关的事情都感兴趣,这就是他涉猎广泛的原因,包括从MS-DOS TSR到微服务,从Atmel微控制器到Android、iOS和Chromebook,从C / C ++到Java,从Oracle到MongoDB。每当有人需要使用创新的方法解决问题时,他都热衷于尝试!

 

 

 

 

About the Reviewer  

关于评审者

Aristides Villarreal Bravo是Java开发人员、NetBeans梦之队的成员以及Java用户组的领导者。Aristides住在巴拿马,他组织并参加了与Java、JavaEE、NetBeans、NetBeans

平台、免费软件和移动设备相关的各种会议和研讨会。他还是jmoordb的作者,主要写关于Java、NetBeans和Web开发的教程和博客。

Aristides参与了几个关于NetBeans、NetBeans DZone和JavaHispano等主题的网站访谈,他是NetBeans插件的开发人员。

 

 

 

Contents

目  录

译者序

前言

关于作者

关于评审者

第1章 从面向对象到函数式编程  1

1.1 Java简介  1

1.2 Java编程范式  2

1.2.1 命令式编程  2

1.2.2 面向对象编程  3

1.2.3 声明式编程  6

1.2.4 函数式编程  6

1.3 流以及集合的使用  7

1.4 统一建模语言简介  8

1.5 设计模式和原则  11

1.5.1 单一职责原则  12

1.5.2 开闭原则  13

1.5.3 里氏替换原则  13

1.5.4 接口隔离原则  14

1.5.5 依赖倒置原则  16

1.6 总结  16

第2章 创建型模式  18

2.1 单例模式  18

2.1.1 同步锁单例模式  19

2.1.2 拥有双重校验锁机制的同步锁单例模式  20

2.1.3 无锁的线程安全单例模式  21

2.1.4 提前加载和延迟加载  21

2.2 工厂模式  22

2.2.1 简单工厂模式  22

2.2.2 工厂方法模式  25

2.2.3 抽象工厂模式  27

2.2.4 简单工厂、工厂方法与抽象工厂模式之间的对比  28

2.3 建造者模式  29

2.3.1 汽车建造者样例  30

2.3.2 简化的建造者模式  32

2.3.3 拥有方法链的匿名建造者  32

2.4 原型模式  33

2.5 对象池模式  34

2.6 总结  36

第3章 行为型模式  37

3.1 责任链模式  38

3.2 命令模式  40

3.3 解释器模式  43

3.4 迭代器模式  47

3.5 观察者模式  50

3.6 中介者模式  51

3.7 备忘录模式  53

3.8 状态模式  55

3.9 策略模式  55

3.10 模板方法模式  56

3.11 空对象模式  57

3.12 访问者模式  58

3.13 总结  59

第4章 结构型模式  60

4.1 适配器模式  61

4.2 代理模式  66

4.3 装饰器模式  70

4.4 桥接模式  73

4.5 组合模式  76

4.6 外观模式  79

4.7 享元模式  83

4.8 总结  88

第5章 函数式编程  89

5.1 函数式编程简介  89

5.1.1 lambda表达式  91

5.1.2 纯函数  92

5.1.3 引用透明性  92

5.1.4 初等函数  93

5.1.5 高阶函数  93

5.1.6 组合  93

5.1.7 柯里化  93

5.1.8 闭包  94

5.1.9 不可变性  95

5.1.10 函子  95

5.1.11 单子  96

5.2 Java中的函数式编程  97

5.2.1 lambda表达式  97

5.2.2 流  98

5.3 重新实现面向对象编程设计模式  102

5.3.1 单例模式  102

5.3.2 建造者模式  102

5.3.3 适配器模式  103

5.3.4 装饰器模式  103

5.3.5 责任链模式  103

5.3.6 命令模式  104

5.3.7 解释器模式  104

5.3.8 迭代器模式  104

5.3.9 观察者模式  105

5.3.10 策略模式  105

5.3.11 模板方法模式  105

5.4 函数式设计模式  106

5.4.1 MapReduce  106

5.4.2 借贷模式  107

5.4.3 尾调用优化  108

5.4.4 记忆化  109

5.4.5 执行around方法  110

5.5 总结  111

第6章 响应式编程  112

6.1 什么是响应式编程  113

6.2 RxJava简介  114

6.3 安装RxJava  115

6.3.1 Maven下的安装  115

6.3.2 JShell下的安装  116

6.4 Observable、Flowable、Observer和Subscription的含义  116

6.5 创建Observable  118

6.5.1 create操作符  118

6.5.2 defer操作符  119

6.5.3 empty操作符  120

6.5.4 from操作符  120

6.5.5 interval操作符  120

6.5.6 timer操作符  121

6.5.7 range操作符  121

6.5.8 repeat操作符  121

6.6 转换Observable  122

6.6.1 subscribe操作符  122

6.6.2 buffer操作符  122

6.6.3 flatMap操作符  122

6.6.4 groupBy操作符  124

6.6.5 map操作符  124

6.6.6 scan操作符  125

6.6.7 window操作符  125

6.7 过滤Observable  125

6.7.1 debounce操作符  125

6.7.2 distinct操作符  126

6.7.3 elementAt操作符  126

6.7.4 f?ilter操作符  127

6.7.5 f?irst/last操作符  127

6.7.6 sample操作符  128

6.7.7 skip操作符  128

6.7.8 take操作符  128

6.8 组合Observable  128

6.8.1 combine操作符  129

6.8.2 join操作符  129

6.8.3 merge操作符  130

6.8.4 zip操作符  131

6.9 异常处理  131

6.9.1 catch操作符  131

6.9.2 do操作符  132

6.9.3 using操作符  133

6.9.4 retry操作符  133

6.10 线程调度器  134

6.11 Subject  135

6.12 示例项目  136

6.13 总结  139

第7章 响应式设计模式  140

7.1 响应模式  140

7.1.1 请求-响应模式  140

7.1.2 异步通信模式  146

7.1.3 缓存模式  148

7.1.4 扇出与最快响应模式  149

7.1.5 快速失败模式  150

7.2 弹性模式  150

7.2.1 断路器模式  150

7.2.2 故障处理模式  151

7.2.3 有限队列模式  151

7.2.4 监控模式  152

7.2.5 舱壁模式  152

7.3 柔性模式  152

7.3.1 单一职责模式  153

7.3.2 无状态服务模式  154

7.3.3 自动伸缩模式  156

7.3.4 自包含模式  156

7.4 消息驱动通信模式  157

7.4.1 事件驱动通信模式  157

7.4.2 出版者-订阅者模式  157

7.4.3 幂等性模式  158

7.5 总结  158

第8章 应用架构的发展趋势  159

8.1 什么是应用架构  159

8.2 分层架构  160

8.2.1 分层架构示例  162

8.2.2 tier和layer的区别  165

8.2.3 分层架构的作用  165

8.2.4 分层架构面临的挑战  165

8.3 MVC架构  166

8.3.1 MVC架构示例  168

8.3.2 更现代的MVC实现  170

8.3.3 MVC架构的作用  171

8.3.4 MVC架构面临的挑战  171

8.4 面向服务架构  171

8.4.1 面向服务架构示例  172

8.4.2 Web服务  173

8.4.3 SOAP与REST  173

8.4.4 企业服务总线  174

8.4.5 面向服务架构的作用  174

8.4.6 面向服务架构面临的挑战  175

8.5 微服务架构  176

8.5.1 微服务架构示例  176

8.5.2 服务间的通信  178

8.5.3 微服务架构的作用  178

8.5.4 微服务架构面临的挑战  178

8.6 无服务器架构  179

8.6.1 无服务器架构示例  179

8.6.2 独立于基础设施规划  184

8.6.3 无服务器架构的作用  184

8.6.4 无服务器架构面临的挑战  184

8.7 总结  185

第9章 Java中的最佳实践  186

9.1 Java简史  186

9.1.1 Java 5的特性  187

9.1.2 Java 8的特性  188

9.1.3 目前官方支持的Java版本  188

9.2 Java 9的最佳实践和新特性  189

9.2.1 Java平台模块化系统  189

9.2.2 JShell  192

9.2.3 接口中的私有方法  194

9.2.4 流的增强功能  195

9.2.5 创建不可变集合  196

9.2.6 在数组中添加方法  197

9.2.7 Optional类的增强功能  198

9.2.8 新的HTTP客户端  199

9.2.9 Java 9增加的其他功能  200

9.3 Java 10的最佳实践和新特性  201

9.3.1 局部变量类型推断  201

9.3.2 集合的copyOf方法  203

9.3.3 并行垃圾回收机制  204

9.3.4 Java 10增加的其他功能  205

9.4 总结  205


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。