设计模式:Java语言中的应用

设计模式:Java语言中的应用
作 者: 结城 洁 著,博硕文化 译;博硕文化译
出版社: 中国铁道工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: Java
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

暂缺《设计模式:Java语言中的应用》作者简介

内容简介

本书是一本Design Pattern的入门书,书中以浅显易懂的语言逐一说明了GoF的23个Design Pattern,让初次学习面向对象的读者也能立即掌握。在本书中不会看到死板的理论型文章,以Java语言写出书中各Pattern的范例程序,可以直接在计算机上运行,便于读者深入体会和应用。学习设计Pattern不仅是为了将来做准备,而且有助于从另一个全新角度重新审视我们平时编写的程序,提高软件的复用性、扩展性,这才是设计Pattern的真正意义,也是本书理论与实例相结合的目的。

图书目录

第0章 漫谈UML

UML

类图

类和层次的关系

接口与实现

聚合

存取控制

类间的关联性

顺序图

处理流程和对象间的协调

开始学习Design Patterns之前

Design Patterns不等于类函数库

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

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

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

自己仔细琢磨范例

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

第1部分 先熟悉设计Pattern

第1章Iterator——迭代器

Iterator Pattern

程序示例

Aggregate接口

Iterator接口

Book类

BookShelf类

BookShelflterator类

Main类

Iterator Pattern的所有参与者

扩展自我视野的提示

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

抽象类、接口实在很难搞

Aggregate与Iterator的对应

“下一个”容易搞错

“最后一个"也容易错

一个以上的Iterator

各种iterator

不需要deletelterator

相关Pattern

重点回顾

练习题

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

Adapter Pattern

程序示例(1)(继承)

Banner类

Print接口

PrintBanner类

Main类

程序示例(2)(委托)

Print类

PrintBanner类

Adapter Pattern的所有参与者

扩展自我视野的提示

什么时候用

就算没有源程序也无妨

版本更新与兼容性

类差别太大

相关Pattern

重点回顾

练习题

第2部分 万事交给子类

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

Template Method Pattern

何谓模板(Template)

Template Method Pattern是什么

程序示例

AbstractDisplay类

CharDisplay类

StringDisplay类

Main类

Template Method Pattern的所有参与者

扩展自我视野的提示

逻辑可共享

父类跟子类的连续性

子类应视同父类

相关Pattern

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

父类对子类的要求

抽象类的意义

父类跟子类之间的协调

重点回顾

练习题

第4章 Factory Method(工厂方法)

建立对象实例交给子类

Factory Method Pattern

程序示例

Product类

Factory类

IDCard类

IDCardFactory类

Main类

Factory Method Pattern的所有参与者

扩展自我视野的提示

框架与内容

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

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

相关Pattern

重点回顾

练习题

第3部分 建立对象实例

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

Singleton Pattern

程序示例

Singleton类

Main类

Singleton Pattern的所有参与者

扩展自我视野的提示

设限的理由

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

相关Pattern

重点回顾

练习题

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

Prototype Pattern

程序示例

Product接口

Manager类

MessageBox类

UnderlinePen类

Main类

Prototype Pattern的所有参与者

扩展自我视野的提示

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

类名是一种束缚

相关Pattern

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

Java语言的clone

Clone方法是在哪里定义

Cloneable所要求的方法是什么

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

重点回顾

练习题

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

Builder PaRem

程序示例

Builder类

Director类

TextBuilder类

HTMLBuilder类

Main类

Builder PaRem的所有参与者

相关Pattern

扩展自我视野的提示

谁知道哪个部分

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

源代码的解读与修改

重点回顾

练习题

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

Abstract Factory Pattern

程序示例

抽象零件:Item类

抽象零件:Link类

抽象零件:Tray类

抽象产品:Page类

抽象工厂:Factory类

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

具体工厂:ListFactory类

具体零件:ListLink类

具体零件:ListTray类

具体产品:ListPage类

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

具体工厂:TableFactory类

具体零件:TableLink类

具体零件:TableTray类

具体产品:TablePage类

Abstract Factory Pattern的所有参与者

扩展自我视野的提示

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

新增零件很有难度

相关Pattern

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

重点回顾

练习题

第4部分切割性思考

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

Bridge Pattern

类层次的两大责任

程序示例

功能的类层次:Display类

功能的类层次:CountDisplay类

实现的类层次:DisplayImpl类

实现的类层次:StringDisplaylmpl类

Main类

Bridge Pattern的所有参与者

扩展自我视野的提示

先区分再扩充就很轻松

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

相关Pattern

重点回顾

练习题

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

Strategy Pattern

程序示例

Hand类

Strategy接口

WinningStrategy类

ProbStrategy类

Player类

Main类

Strategy Pattern的所有参与者

扩展自我视野的提示

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

执行时也可切换

相关Pattern

重点回顾

练习题

第5部分 一视同仁

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

Composite Pattern

程序示例

Entry类

File类

Directory类

FileTreatmentException类

Main类

Composite Pattern的所有参与者

扩展自我视野的提示

单一复数的一视同仁

add放在哪里

递归结构随时都会出现

相关Pattern

重点回顾

练习题

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

Decorator Pattern

程序示例

Display类

StringDisplay类

Border类

SideBorder类

FuUBorder类

Main类

Decorator Pattern的所有参与者

扩展自我视野的提示

可穿透的接口(API)

可新增功能但内容不变

可新增动态功能

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

java.io包和Decorator Pattern

小类多了一点

相关Pattern

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

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

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

重点回顾

练习题

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

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

Visitor Pattern

程序示例

Visitor类

Acceptor接口

Entry类

File类

Directory类

ListVisitor类

FileTreatmentException类

Main类

Visitor和Acceptor两边彼此调用

Visitor Pattern的所有参与者

扩展自我视野的提示

双重调度(double dispatch)

为什么要搞得这么复杂

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

新增ConcreteVisitor参与者?简单

新增ConcreteAcceptor参与者?复杂

Visitor要怎样做才能进行处理

相关Pattern

重点回顾

练习题

第14章 Chain of Respons-biIity(职责链)——责任转送

Chain of Responsibility责任转送

程序示例

Trouble类

Support类

NoSupport类

LimitSupport类

OddSupport类

SpecialSupport类

Main类

Chain of Responsibility Pattern的所有参与者

扩展自我视野的提示

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

机动性改变连锁形态

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

转送会不会导致处理变慢

相关Pattern

重点回顾

练习题

第7部分 简单最好

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

Facade单一窗口

程序示例

Database类

HtmlWriter类

PageMaker类

Main类

Facade Pattern的所有参与者

扩展自我视野的提示

Facade参与者到底在做什么事

Facade Pattern的递归应用

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

相关Pattern

重点回顾

练习题

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

IvleQlator rattern

程序示例

Mediator接口

Colleague接口

ColleagueButton类

ColleagueTextField类

ColleagueCheckbox类

LoginFrame类

Main类

Mediator Pattern的所有参与者

扩展自我视野的提示

当分散变成灾难时

通讯路径数量暴增

哪些可以再利用

相关Pattern

重点回顾

练习题

第8部分管理状态

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

Observer Pattern

程序示例

Observer接口

NumberGenerator类

RandomNumberGenerator类

DigitObserver类

GraphObserver类

Main类

Observer Pattern的所有参与者

扩展自我视野的提示

这里也可对换

Observer的顺序

Observer的行为影响Subiect时

如何处理更新的提示

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

Model/View/Controller(MVC)

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

相关Pattern

重点回顾

练习题

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

Memento Pattern

程序示例

Memento类

Gamer类

Main类

Memento Pattern的所有参与者

扩展自我视野的提示

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

Memento可以有几个

Memento有没有使用期限

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

相关Pattern

重点回顾

练习题

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

State Pattern

程序示例

金库保安系统

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

使用State Pattern的虚拟程序代码

State接口

DayState类

NightState类

Context接口

SafeFrame类

Main类

State Pattern的所有参与者

扩展自我视野的提示

分割统合

有此状态才会有的处理

状态迁移该由谁管

不会有自我矛盾

新增状态易如反掌

变化万千的对象实例

相关Pattern

重点回顾

练习题

第9部分 精简不浪费

第20章 Flyweight(享元)——有相同的部分就共享

采取精简政策

Flyweight Pattern

程序示例

BigChar类

BigCharFactory类

BigString类

Main类

Flyweight Pattern的所有参与者

扩展自我视野的提示

影响会传到所有相关位置

Intrinsic和extrinsic

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

非内存部分的记录

相关Pattern

重点回顾

练习题

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

Proxy Pattern

程序示例

Printer类

Printable接口

PrinterProxy类

Main类

Proxy Pattern的所有参与者

扩展自我视野的提示

利用代理提高处理速度

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

代理和委托

穿透性

HTTP proxy

各种Proxy

相关Pattern

重点回顾

练习题

第10部分 用类来表示

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

Command Pattern

程序示例

Command接口

MacroCommand类

DrawCommand类

Drawable接口

DrawCanvas类

Main类

Command Pattern的所有参与者

扩展自我视野的提示

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

存储记录

转换器

相关Pattern

重点回顾

练习题

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

Interpreter Pattern

迷你语言

迷你语言的命令

迷你程序示例

迷你语言的语法

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

程序示例

Node类

ProgramNode类

CommandListNode类

CommandNode类

RepeatCommandNode类

PrimitiveCommandNode类

Context类

ParseException类

Main类

Interpreter Pattern的所有参与者

扩展自我视野的提示

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

略过/读入

相关Pattern

重点回顾和最后的叮咛

练习题

附录

附录A 练习题的解答

附录B GoF的设计Pattern分类