《设计模式-Java语言中的应用》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:结城浩著;博硕文化译
  • 出 版 社:北京:中国铁道出版社
  • 出版年份:2005
  • ISBN:7113064566
  • 页数:436 页
图书介绍:本书是一本Design Patterns 的入门书,书中结合实例用浅显易懂的文字逐一说明GoF的23个设计模式。

第0章 漫谈UML 1

UML 2

类图 2

类和层次的关系 2

接口与实现 3

聚合 4

存取控制 5

类间的关联性 5

顺序图 6

处理流程和对象间的协调 6

开始学习Design Patterns之前 7

Design Patterns不等于类函数库 7

不要认为程序范例已经是完成品 8

不过,类函数库中确实用到Design Patterns 8

图不能只是看,要仔细解读 9

自己仔细琢磨范例 9

了解角色功能——白雪公主给谁演 9

第1部分 先熟悉设计Pattern 11

第1章 Iterator——迭代器 11

Iterator Pattern 12

程序示例 12

Aggregate接口 13

Iterator接口 14

Book类 15

BookShelf类 15

BookShelfIterator类 16

Main类 17

Iterator Pattern的所有参与者 18

无论实现结果如何,都能使用Iterator 19

扩展自我视野的提示 19

抽象类、接口实在很难搞 20

Aggregate与Iterator的对应 20

“下一个”容易搞错 21

“最后一个”也容易错 21

一个以上的Iterator 21

各种iterator 21

不需要deleteIterator 21

相关Pattern 22

重点回顾 22

练习题 22

第2章 Adapter(适配器)——换个包装再度利用 23

程序示例(1)(继承) 24

Adapter Pattern 24

Banner类 25

Print接口 26

PrintBanner类 26

Main类 27

程序示例(2)(委托) 27

Print类 28

PrintBanner类 29

Adapter Pattern的所有参与者 29

扩展自我视野的提示 30

什么时候用 30

就算没有源程序也无妨 31

版本更新与兼容性 31

重点回顾 32

相关Pattern 32

类差别太大 32

练习题 33

第2部分 万事交给子类 35

第3章 Template Method(模板方法)——实际处理就交给子类 35

Template Method Pattern 36

何谓模板(Template) 36

Template Method Pattern是什么 36

程序示例 37

AbstractDisplay类 38

CharDisplay类 38

StringDisplay类 39

Main类 41

逻辑可共享 42

扩展自我视野的提示 42

Template Method Pattern的所有参与者 42

父类跟子类的连续性 43

子类应视同父类 43

相关Pattern 43

进阶说明:类层次与抽象类 44

父类对子类的要求 44

抽象类的意义 44

父类跟子类之间的协调 44

重点回顾 45

练习题 45

第4章 Factory Method(工厂方法)——建立对象实例交给子类 47

Factory Method Pattern 48

程序示例 48

Factory类 49

Product类 49

IDCard类 50

IDCardFactory类 51

Main类 51

Factory Method Pattern的所有参与者 52

扩展自我视野的提示 53

框架与内容 53

产生对象实例——方法的实现方式 54

Pattern利用与程序开发工程师之间的沟通 55

相关Pattern 55

重点回顾 56

练习题 56

第3部分 建立对象实例 57

第5章 Singleton(单件)——惟一的对象实例 57

程序示例 58

Singleton Pattern 58

Singleton类 59

Main类 59

Singleton Pattern的所有参与者 60

扩展自我视野的提示 61

设限的理由 61

惟一对象实例产生的时间点 61

相关Pattern 61

重点回顾 61

练习题 62

第6章 Prototype(原型)——复制建立对象实例 63

Prototype Pattern 64

程序示例 65

Manager类 66

Product接口 66

MessageBox类 67

UnderlinePen类 68

Main类 69

Prototype Pattern的所有参与者 70

扩展自我视野的提示 71

难道真的不能利用类来建立对象实例吗 71

类名是一种束缚 72

相关Pattern 72

深入说明:clone方法和java.lang.Cloneable接口 73

Java语言的clone 73

clone方法是在哪里定义 73

Cloneable所要求的方法是什么 73

练习题 74

clone方法做的是浅拷贝(shallow copy) 74

重点回顾 74

第7章 Builder(生成器)——组合复杂的对象实例 75

Builder Pattern 76

程序示例 76

Builder类 77

Director类 77

TextBuilder类 78

HTMLBuilder类 79

Main类 80

Builder Pattern的所有参与者 83

相关Pattern 84

在设计时该决定哪些事、又不该决定哪些事 85

谁知道哪个部分 85

扩展自我视野的提示 85

源代码的解读与修改 86

重点回顾 86

练习题 86

第8章 Abstract Factory(抽象工厂)——把相关零件组合成产品 89

Abstract Factory Pattern 90

程序示例 90

抽象零件:Item类 94

抽象零件:Link类 95

抽象零件:Tray类 95

抽象产品:Page类 96

抽象工厂:Factory类 97

利用工厂把零件组合成产品:Main类 98

具体零件:ListLink类 100

具体工厂:ListFactory类 100

具体零件:ListTray类 101

具体产品:ListPage类 102

在程序示例中新增其他的具体工厂 103

具体工厂:TableFactory类 105

具体零件:TableLink类 106

具体零件:TableTray类 106

具体产品:TablePage类 107

Abstract Factory Pattern的所有参与者 108

扩展自我视野的提示 110

新增具体工厂尤如探囊取物 110

新增零件很有难度 110

相关Pattern 110

深入说明:各种建立对象实例的手段 111

练习题 112

重点回顾 112

第4部分 切割性思考 113

第9章 Bridge(桥接)——分成功能层次和实现层次 113

Bridge Pattern 114

类层次的两大责任 114

程序示例 116

功能的类层次:Display类 116

功能的类层次:CountDisplay类 117

实现的类层次:DisplayImpl类 118

实现的类层次:StringDisplayImpl类 118

Main类 119

Bridge Pattern的所有参与者 121

扩展自我视野的提示 121

先区分再扩充就很轻松 121

继承是生死不离、委托是潇洒分手 122

相关Pattern 123

重点回顾 123

练习题 123

第10章 Strategy(策略)——把算法整个换掉 125

Strategy Pattern 126

程序示例 126

Hand类 127

Strategy接口 129

WinningStrategy类 129

ProbStrategy类 130

Player类 132

Main类 133

Strategy Pattern的所有参与者 135

执行时也可切换 136

为什么要特地建立Strategy参与者 136

扩展自我视野的提示 136

相关Pattern 137

重点回顾 137

练习题 137

第5部分 一视同仁 141

第11章 Composite(组成)——对容器和内容一视同仁 141

Composite Pattern 142

程序示例 142

Entry类 143

File类 144

Directory类 145

FileTreatmentException类 147

Main类 147

单、复数的一视同仁 150

扩展自我视野的提示 150

Composite Pattern的所有参与者 150

add放在哪里 151

递归结构随时都会出现 152

相关Pattern 152

重点回顾 152

练习题 152

第12章 Decorator(装饰)——对装饰和内容一视同仁 155

Decorator Pattern 156

程序示例 156

Display类 157

StringDisplay类 158

Border类 159

SideBorder类 159

FullBorder类 161

Main类 162

Decorator Pattern的所有参与者 163

扩展自我视野的提示 164

可穿透的接口(API) 164

可新增功能但内容不变 165

可新增动态功能 165

即使只有简单的种类规划,也可增加多种功能 165

java.io包和Decorator Pattern 166

小类多了一点 167

相关Pattern 167

深入说明:继承和委托的一视同仁 167

继承——对子类和父类一视同仁 167

委托——对自己和委托对象一视同仁 168

重点回顾 169

练习题 170

第6部分 在结构中穿梭来去 173

第13章 Visitor(访问者)——在结构中穿梭还同时做事 173

Visitor Pattern 174

程序示例 174

Visitor类 174

Acceptor接口 176

Entry类 176

File类 177

Directory类 178

ListVisitor类 179

FileTreatmentException类 180

Main类 180

Visitor和Acceptor两边彼此调用 182

Visitor Pattern的所有参与者 183

双重调度(double dispatch) 184

扩展自我视野的提示 184

为什么要搞得这么复杂 185

The Open-Closed Principle——扩充时开放、修改时关闭 185

新增ConcreteVisitor参与者?简单 186

新增ConcreteAcceptor参与者?复杂 186

Visitor要怎样做才能进行处理 186

相关Pattern 186

重点回顾 187

练习题 187

第14章 Chain of Responsibility(职责链)——责任转送 191

Chain of Responsibility责任转送 192

程序示例 192

Support类 193

Trouble类 193

NoSupport类 195

LimitSupport类 195

OddSupport类 196

SpecialSupport类 196

Main类 197

Chain of Responsibility Pattern的所有参与者 198

扩展自我视野的提示 199

让要求跟处理要求两者间的结合关系不会太紧密 199

机动性改变连锁形态 200

能更专心在自己的工作岗位上 200

转送会不会导致处理变慢 200

重点回顾 201

练习题 201

相关Pattern 201

第7部分 简单最好 203

第15章 Facade(外观)——单一窗口 203

Facade单一窗口 204

程序示例 204

Database类 206

HtmlWriter类 206

PageMaker类 208

Main类 209

Facade Pattern的所有参与者 210

扩展自我视野的提示 211

Facade参与者到底在做什么事 211

Facade Pattern的递归应用 211

程序设计师拒绝使用Facade的理由——敏感的心理因素 211

练习题 212

相关Pattern 212

重点回顾 212

第16章 Mediator(中介者)——只要面对一个顾问 215

Mediator Pattern 216

程序示例 216

Mediator接口 220

Colleague接口 220

ColleagueButton类 221

ColleagueTextField类 222

ColleagueCheckbox类 223

LoginFrame类 224

Main类 227

Mediator Pattern的所有参与者 227

哪些可以再利用 229

通讯路径数量暴增 229

扩展自我视野的提示 229

当分散变成灾难时 229

相关Pattern 230

重点回顾 230

练习题 230

第8部分 管理状态 231

第17章 Observer(观察者)——通知状态变化 231

Observer Pattern 232

程序示例 232

Observer接口 232

NumberGenerator类 233

RandomNumberGenerator类 234

DigitObserver类 235

GraphObserver类 235

Main类 236

Observer Pattern的所有参与者 237

扩展自我视野的提示 238

这里也可对换 238

Observer的顺序 239

Observer的行为影响Subject时 239

如何处理更新的提示 239

“通知”的意义重于“观察” 240

Model/View/Controller(MVC) 240

补充说明:java.util.Observer接口 241

相关Pattern 241

重点回顾 241

练习题 242

第18章 Memento(备忘录)——存储状态 243

程序示例 244

Memento Pattern 244

Memento类 245

Gamer类 246

Main类 248

Memento Pattern的所有参与者 252

扩展自我视野的提示 253

2种接口(API)与存取控制 253

Memento可以有几个 255

Memento有没有使用期限 255

Caretaker参与者跟Originator参与者区隔使用的意义 255

相关Pattern 255

重点回顾 256

练习题 256

第19章 State(状态)——以类表示状态 259

金库保安系统 260

State Pattern 260

程序示例 260

不使用State Pattern的虚拟程序代码 261

使用State Pattern的虚拟程序代码 262

State接口 263

DayState类 265

NightState类 266

Context接口 267

SafeFrame类 267

Main类 271

State Pattern的所有参与者 272

扩展自我视野的提示 273

分割统合 273

状态迁移该由谁管 274

有此状态才会有的处理 274

新增状态易如反掌 275

不会有自我矛盾 275

变化万千的对象实例 276

相关Pattern 276

重点回顾 277

练习题 277

第9部分 精简不浪费 279

第20章 Flyweight(享元)——有相同的部分就共享,采取精简政策 279

Flyweight Pattern 280

程序示例 280

BigChar类 285

BigCharFactory类 286

BigString类 287

Flyweight Pattern的所有参与者 289

Main类 289

扩展自我视野的提示 290

影响会传到所有相关位置 290

Intrinsic和extrinsic 291

管理中的对象实例不会被视为垃圾收集 291

非内存部分的记录 292

相关Pattern 293

重点回顾 293

练习题 293

第21章 Proxy(代理)——要用再建立 295

Proxy Pattern 296

程序示例 296

Printer类 298

PrinterProxy类 299

Printable接口 299

Main类 301

Proxy Pattern的所有参与者 301

扩展自我视野的提示 302

利用代理提高处理速度 302

不能让代理和本人合二为一吗 303

代理和委托 303

穿透性 303

HTTP proxy 304

各种Proxy 304

相关Pattern 304

重点回顾 305

练习题 305

第22章 Command(命令)——将命令写成类 307

第10部分 用类来表示 307

Command Pattern 308

程序示例 308

Command接口 309

MacroCommand类 310

DrawCommand类 311

Drawable接口 312

DrawCanvas类 312

Main类 314

Command Pattern的所有参与者 317

扩展自我视野的提示 319

命令应该要有的信息是什么 319

存储记录 319

转换器 320

练习题 322

重点回顾 322

相关Pattern 322

第23章 Interpreter(解释器)——以类来表达语法规则 325

Interpreter Pattern 326

迷你语言 326

迷你语言的命令 326

迷你程序示例 327

迷你语言的语法 330

终点表达式与非终点表达式 331

程序示例 331

Node类 332

ProgramNode类 333

CommandListNode类 334

CommandNode类 335

RepeatCommandNode类 336

PrimitiveCommandNode类 337

Context类 337

ParseException类 339

Main类 339

Interpreter Pattern的所有参与者 341

扩展自我视野的提示 342

还有其他不同的迷你语言吗 342

略过/读入 343

相关Pattern 343

重点回顾和最后的叮咛 343

练习题 344

附录 345

附录A 练习题的解答 345

附录B GoF的设计Pattern分类 435