微信扫一扫,移动浏览光盘
简介
本书是一本Design Pattern的入门书,书中以浅显易懂的语言逐一说明了GoF的23个Design Pattern,让初次学习面向对象的读者也能立即掌握。在本书中不会看到死板的理论型文章,以Java语言写出书中各Pattern的范例程序,可以直接在计算机上运行,便于读者深入体会和应用。学习设计Pattern不仅是为了将来做准备,而且有助于从另一个全新角度重新审视我们平时编写的程序,提高软件的复用性、扩展性,这才是设计Pattern的真正意义,也是本书理论与实例相结合的目的。
目录
第0章 漫谈uml
uml
类图
类和层次的关系
接口与实现
聚合
存取控制
类间的关联性
顺序图
处理流程和对象间的协调
开始学习designpatterns之前
designpatterns不等于类函数库
不过,类函数库中确实用到design patterns
不要认为程序范例已经是完成品
图不能只是看,要仔细解读
自己仔细琢磨范例
了解角色功能——白雪公主给谁演
第1部分 先熟悉设计panern
第1章 iterator——迭代器
iterator pattem
.程序示例
aggregate接口
iterator接口
book类
bookshelf类
bookshelfiterator类
main类
iteratorparem的所有参与者
扩展自我视野的提示
无论实现结果如何,都能使用iterator
抽象类、接口实在很难搞
aggregate与iterator的对应
“下一个”容易搞错
“最后一个”也容易错
一个以上的iterator
各种iterator
不需要deletelterator
相关parem
重点回顾
练习题
第2章 adapteler(适配器)——换个包装再度利用
adapter parem
程序示例(1) (继承)
banner类
print接口
printbanner类
main类
程序示例(2) (委托)
print类
printbanner类
adapter parem的所有参与者
扩展自我视野的提示
什么时候用
就算没有源程序也无妨
版本更新与兼容性
类差别太大
相关pattem
重点回顾
练习题
第2部分 万事交给子类
第3章 template method(模板方法)——实际处理就交给子类
template method pauem
何谓模板(template)
template method pattem是什么
程序示例
地sbstractdisplay类
chardisplay类
stringdisplay类
main类
template method pattem的所有参与者
扩展自我视野的提示
逻辑可共享
父类跟子类的连续性
子类应视同父类
相关pattem
进阶说明:类层次与抽象类
父类对子类的要求
抽象类的意义
父类跟子类之间的协调
重点回顾
练习题
第4章 factory method(工厂方法)——
建立对象实例交给子类
factory method pattem
程序示例
product类
factory类
idcard类
idcardfactory类
main类
factory method pattem的所有参与者
扩展自我视野的提示
框架与内容
产生对象实例——方法的实现方式
pattem利用与程序开发工程师之间的沟通
相关pattem
重点回顾
练习题
第3部分 建立对象实例
第5章 singleton(单件)——惟一的对象实例
singleton parem
程序示例
singleton类
main类
singleton parem的所有参与者
扩展自我视野的提示
设限的理由
惟一对象实例产生的时间点
相关parem
重点回顾
练习题
第6章 prototype(原型)——复制建立对象实例
prototype parem
程序示例
product接口
mariager类
messagebox类
underlinepen类
main类
prototype parem的所有参与者
扩展自我视野的提示
难道真的不能利用类来建立对象实例吗
类名是一种束缚
相关parem
深入说明:clone方法和java.1ang.cloneable接口
java语言的c10ne
clone方法是在哪里定义
c10neable所要求的方法是什么
clone方法做的是浅拷贝(shallowcopy)
重点回顾
练习题
第7章 builder(生成器)——组合复杂的对象实例
builder pattern
程序示例
builder类
director类
textbuilder类
htmlbuilder类
main类
builderparem的所有参与者
相关pattern
扩展自我视野的提示
谁知道哪个部分
在设计时该决定哪些事、又不该决定哪些事
源代码的解读与修改
重点回顾
练习题
第8章 abstract factory(抽象工厂)——
把相关零件组合成产品
abstract factory pattem
程序示例
抽象零件: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类
实现的类层次:displaylmpl类
实现的类层次:stringdisplaylmpl类
main类
bridge pattern的所有参与者
扩展自我视野的提示
先区分再扩充就很轻松
继承是生死不离、委托是潇洒分手
相关pattern
重点回顾
练习题
第10章 strategy(策略)——把算法整个换掉
strategypauern
程序示例
hand类
strategy接口
winningstrategy类
probstrategy类
player类
main类
strategyparem的所有参与者
扩展自我视野的提示
为什么要特地建立strategy参与者
执行时也可切换
相关parem
重点回顾
练习题
第5部分 一视同仁
第11章 composite(组成)——对容器和内容一视同仁
compositepattern
程序示例
entry类
file类
directory类
filetreatmentexception类
main类
compositeparern的所有参与者
扩展自我视野的提示
单、复数的一视同仁
add放在哪里
递归结构随时都会出现
相关pattern
重点回顾
练习题
第12章 decorator(装饰)——对装饰和内容一视同仁
decorator pattem
程序示例
display类
sbinsdisplay类
border类
sideborder类
fulmorder类
main类
decorator pattem的所有参与者
扩展自我视野的提示
可穿透的接口(apl)
可新增功能但内容不变
可新增动态功能
即使只有简单的种类规划,也可增加多种功能
java.io包和decorator pattem
小类多了一点
相关pattern
深入说明:继承和委托的一视同仁
继承——对子类和父类一视同仁
委托——对自己和委托对象一视同仁
重点回顾
练习题
第6部分 在结构中穿梭来去
第13章 visitor(访问者)——在结构中穿梭还同时做事
ⅵsitor pattem
程序示例
ⅵsitor类
acceptor接口
entry类
file类
directory类
listvisitor类
filetreatmentexception类
main类
visitor和acceptor两边彼此调用
visitor parem的所有参与者
扩展自我视野的提示
双重调度(double dispatch)
为什么要搞得这么复杂
theopen-closedprinciple——扩充时开放、修改时关闭
新增concretevisitor参与者?简单
新增concreteacceptor参与者?复杂
visitor要怎样做才能进行处理
相关pattern
重点回顾
练习题
第14章 chain of responsibility(职责链)——责任转送
chain of responsibility责任转送
程序示例
trouble类
support类
nosupport类
limitsupport类
oddsupport类
specialsupport类
main类
chain of responsibility pattern的所有参与者
扩展自我视野的提示
让要求跟处理要求两者间的结合关系不会太紧密
机动性改变连锁形态
能更专心在自己的工作岗位上
转送会不会导致处理变慢
相关pattem
重点回顾
练习题
第7部分 简单最好
第15章 facade(外观)——单一窗口
facade单一窗口
程序示例
database类
htmlwriter类
pagemaker类
main类
facadeparem的所有参与者
扩展自我视野的提示
facade参与者到底在做什么事
facadepa~em的递归应用
程序设计师拒绝使用facade的理由——敏感的心理因素
相关parem
重点回顾
练习题
第16章 mediator(中介者)——只要面对一个顾问
mediator parem
程序示例
mediator接口
colleague接口
colleaguebutton类
colleaguetextfield类
colleaguecheckbox类
loginframe类
main类
mediatorpattem的所有参与者
扩展自我视野的提示
当分散变成灾难时
通讯路径数量暴增
哪些可以再利用
相关pauem
重点回顾
练习题
第8部分 管理状态
第17章 obse~el'(观察者)——通知状态变化…
observerpattern
程序示例
observer接口
numbergenerator类
randomnumbergenerator类
digitobserver类
graphobserver类
main类
observer parern的所有参与者
扩展自我视野的提示
这里也可对换
observer的顺序
observer的行为影响subiect时
如何处理更新的提示
“通知”的意义重于“观察”
model/view/controller(mvc)
补充说明:java.util.observer接口
相关parern
重点回顾
练习题
第18章 memerlto(备忘录)——存储状态
memento parern
程序示例
memento类
gamer类
main类
memento parern的所有参与者
扩展自我视野的提示
2种接口(apl)与存取控制
memento可以有几个
memento有没有使用期限
caretaker参与者跟originator参与者区隔使用的意义
相关pattern
重点回顾
练习题
第19章 state(状态)——以类表示状态
statepattern
程序示例
金库保安系统
不使用state pattern的虚拟程序代码
使用state pattern的虚拟程序代码
state接口
daystate类
nightstate类
context接口
safeframe类
main类
statepattem的所有参与者
扩展自我视野的提示
分割统合
有此状态才会有的处理
状态迁移该由谁管
不会有自我矛盾
新增状态易如反掌
变化万千的对象实例
相关pattem
重点回顾
练习题
第9部分 精简不浪费
第20章 flyweijht(享元)——有相同的部分就共享
采取精简政策
flyweight pauem
程序示例
bigchar类
bigcharfactory类
bigstring类
main类
flyweight parem的所有参与者
扩展自我视野的提示
影响会传到所有相关位置
intrinsic和extrinsic
管理中的对象实例不会被视为垃圾收集
非内存部分的记录
相关pattem
重点回顾
练习题
第21章 pfoxy(代理)——要用再建立
proxypattem
程序示例
printer类
printable接口
printerproxy类
main类
proxy parem的所有参与者
扩展自我视野的提示
利用代理提高处理速度
不能让代理和本人合二为一吗
代理和委托
穿透性
http proxy
各种proxy
相关parem
重点回顾
练习题
第10部分 用类来表示
第22章 command(命令)——将命令写成类
command parem
程序示例
command接口
macrocommand类
drawcommand类
drawable接口
drawcanvas类
main类
command parem的所有参与者
扩展自我视野的提示
命令应该要有的信息是什么
存储记录
转换器
相关parem
重点回顾
练习题
第23章 interpreter(解释器)——以类来表达语法规则
interpreter parem
迷你语言
迷你语言的命令
迷你程序示例
迷你语言的语法
终点表达式与非终点表达式
程序示例
node类
programnode类
commandlistnode类
commandnode类
repeatcommandnode类
primitivecommandnode类
context类
parseexception类
main类
lhterperter pattern的所有参与者
扩展自我视野的提示
还有其他不同的迷你语言吗
略过/读入
相关pattern
重点回顾和最后的叮咛
练习题
附 录
附录a练习题的解答
附录b gof的设计panern分类
uml
类图
类和层次的关系
接口与实现
聚合
存取控制
类间的关联性
顺序图
处理流程和对象间的协调
开始学习designpatterns之前
designpatterns不等于类函数库
不过,类函数库中确实用到design patterns
不要认为程序范例已经是完成品
图不能只是看,要仔细解读
自己仔细琢磨范例
了解角色功能——白雪公主给谁演
第1部分 先熟悉设计panern
第1章 iterator——迭代器
iterator pattem
.程序示例
aggregate接口
iterator接口
book类
bookshelf类
bookshelfiterator类
main类
iteratorparem的所有参与者
扩展自我视野的提示
无论实现结果如何,都能使用iterator
抽象类、接口实在很难搞
aggregate与iterator的对应
“下一个”容易搞错
“最后一个”也容易错
一个以上的iterator
各种iterator
不需要deletelterator
相关parem
重点回顾
练习题
第2章 adapteler(适配器)——换个包装再度利用
adapter parem
程序示例(1) (继承)
banner类
print接口
printbanner类
main类
程序示例(2) (委托)
print类
printbanner类
adapter parem的所有参与者
扩展自我视野的提示
什么时候用
就算没有源程序也无妨
版本更新与兼容性
类差别太大
相关pattem
重点回顾
练习题
第2部分 万事交给子类
第3章 template method(模板方法)——实际处理就交给子类
template method pauem
何谓模板(template)
template method pattem是什么
程序示例
地sbstractdisplay类
chardisplay类
stringdisplay类
main类
template method pattem的所有参与者
扩展自我视野的提示
逻辑可共享
父类跟子类的连续性
子类应视同父类
相关pattem
进阶说明:类层次与抽象类
父类对子类的要求
抽象类的意义
父类跟子类之间的协调
重点回顾
练习题
第4章 factory method(工厂方法)——
建立对象实例交给子类
factory method pattem
程序示例
product类
factory类
idcard类
idcardfactory类
main类
factory method pattem的所有参与者
扩展自我视野的提示
框架与内容
产生对象实例——方法的实现方式
pattem利用与程序开发工程师之间的沟通
相关pattem
重点回顾
练习题
第3部分 建立对象实例
第5章 singleton(单件)——惟一的对象实例
singleton parem
程序示例
singleton类
main类
singleton parem的所有参与者
扩展自我视野的提示
设限的理由
惟一对象实例产生的时间点
相关parem
重点回顾
练习题
第6章 prototype(原型)——复制建立对象实例
prototype parem
程序示例
product接口
mariager类
messagebox类
underlinepen类
main类
prototype parem的所有参与者
扩展自我视野的提示
难道真的不能利用类来建立对象实例吗
类名是一种束缚
相关parem
深入说明:clone方法和java.1ang.cloneable接口
java语言的c10ne
clone方法是在哪里定义
c10neable所要求的方法是什么
clone方法做的是浅拷贝(shallowcopy)
重点回顾
练习题
第7章 builder(生成器)——组合复杂的对象实例
builder pattern
程序示例
builder类
director类
textbuilder类
htmlbuilder类
main类
builderparem的所有参与者
相关pattern
扩展自我视野的提示
谁知道哪个部分
在设计时该决定哪些事、又不该决定哪些事
源代码的解读与修改
重点回顾
练习题
第8章 abstract factory(抽象工厂)——
把相关零件组合成产品
abstract factory pattem
程序示例
抽象零件: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类
实现的类层次:displaylmpl类
实现的类层次:stringdisplaylmpl类
main类
bridge pattern的所有参与者
扩展自我视野的提示
先区分再扩充就很轻松
继承是生死不离、委托是潇洒分手
相关pattern
重点回顾
练习题
第10章 strategy(策略)——把算法整个换掉
strategypauern
程序示例
hand类
strategy接口
winningstrategy类
probstrategy类
player类
main类
strategyparem的所有参与者
扩展自我视野的提示
为什么要特地建立strategy参与者
执行时也可切换
相关parem
重点回顾
练习题
第5部分 一视同仁
第11章 composite(组成)——对容器和内容一视同仁
compositepattern
程序示例
entry类
file类
directory类
filetreatmentexception类
main类
compositeparern的所有参与者
扩展自我视野的提示
单、复数的一视同仁
add放在哪里
递归结构随时都会出现
相关pattern
重点回顾
练习题
第12章 decorator(装饰)——对装饰和内容一视同仁
decorator pattem
程序示例
display类
sbinsdisplay类
border类
sideborder类
fulmorder类
main类
decorator pattem的所有参与者
扩展自我视野的提示
可穿透的接口(apl)
可新增功能但内容不变
可新增动态功能
即使只有简单的种类规划,也可增加多种功能
java.io包和decorator pattem
小类多了一点
相关pattern
深入说明:继承和委托的一视同仁
继承——对子类和父类一视同仁
委托——对自己和委托对象一视同仁
重点回顾
练习题
第6部分 在结构中穿梭来去
第13章 visitor(访问者)——在结构中穿梭还同时做事
ⅵsitor pattem
程序示例
ⅵsitor类
acceptor接口
entry类
file类
directory类
listvisitor类
filetreatmentexception类
main类
visitor和acceptor两边彼此调用
visitor parem的所有参与者
扩展自我视野的提示
双重调度(double dispatch)
为什么要搞得这么复杂
theopen-closedprinciple——扩充时开放、修改时关闭
新增concretevisitor参与者?简单
新增concreteacceptor参与者?复杂
visitor要怎样做才能进行处理
相关pattern
重点回顾
练习题
第14章 chain of responsibility(职责链)——责任转送
chain of responsibility责任转送
程序示例
trouble类
support类
nosupport类
limitsupport类
oddsupport类
specialsupport类
main类
chain of responsibility pattern的所有参与者
扩展自我视野的提示
让要求跟处理要求两者间的结合关系不会太紧密
机动性改变连锁形态
能更专心在自己的工作岗位上
转送会不会导致处理变慢
相关pattem
重点回顾
练习题
第7部分 简单最好
第15章 facade(外观)——单一窗口
facade单一窗口
程序示例
database类
htmlwriter类
pagemaker类
main类
facadeparem的所有参与者
扩展自我视野的提示
facade参与者到底在做什么事
facadepa~em的递归应用
程序设计师拒绝使用facade的理由——敏感的心理因素
相关parem
重点回顾
练习题
第16章 mediator(中介者)——只要面对一个顾问
mediator parem
程序示例
mediator接口
colleague接口
colleaguebutton类
colleaguetextfield类
colleaguecheckbox类
loginframe类
main类
mediatorpattem的所有参与者
扩展自我视野的提示
当分散变成灾难时
通讯路径数量暴增
哪些可以再利用
相关pauem
重点回顾
练习题
第8部分 管理状态
第17章 obse~el'(观察者)——通知状态变化…
observerpattern
程序示例
observer接口
numbergenerator类
randomnumbergenerator类
digitobserver类
graphobserver类
main类
observer parern的所有参与者
扩展自我视野的提示
这里也可对换
observer的顺序
observer的行为影响subiect时
如何处理更新的提示
“通知”的意义重于“观察”
model/view/controller(mvc)
补充说明:java.util.observer接口
相关parern
重点回顾
练习题
第18章 memerlto(备忘录)——存储状态
memento parern
程序示例
memento类
gamer类
main类
memento parern的所有参与者
扩展自我视野的提示
2种接口(apl)与存取控制
memento可以有几个
memento有没有使用期限
caretaker参与者跟originator参与者区隔使用的意义
相关pattern
重点回顾
练习题
第19章 state(状态)——以类表示状态
statepattern
程序示例
金库保安系统
不使用state pattern的虚拟程序代码
使用state pattern的虚拟程序代码
state接口
daystate类
nightstate类
context接口
safeframe类
main类
statepattem的所有参与者
扩展自我视野的提示
分割统合
有此状态才会有的处理
状态迁移该由谁管
不会有自我矛盾
新增状态易如反掌
变化万千的对象实例
相关pattem
重点回顾
练习题
第9部分 精简不浪费
第20章 flyweijht(享元)——有相同的部分就共享
采取精简政策
flyweight pauem
程序示例
bigchar类
bigcharfactory类
bigstring类
main类
flyweight parem的所有参与者
扩展自我视野的提示
影响会传到所有相关位置
intrinsic和extrinsic
管理中的对象实例不会被视为垃圾收集
非内存部分的记录
相关pattem
重点回顾
练习题
第21章 pfoxy(代理)——要用再建立
proxypattem
程序示例
printer类
printable接口
printerproxy类
main类
proxy parem的所有参与者
扩展自我视野的提示
利用代理提高处理速度
不能让代理和本人合二为一吗
代理和委托
穿透性
http proxy
各种proxy
相关parem
重点回顾
练习题
第10部分 用类来表示
第22章 command(命令)——将命令写成类
command parem
程序示例
command接口
macrocommand类
drawcommand类
drawable接口
drawcanvas类
main类
command parem的所有参与者
扩展自我视野的提示
命令应该要有的信息是什么
存储记录
转换器
相关parem
重点回顾
练习题
第23章 interpreter(解释器)——以类来表达语法规则
interpreter parem
迷你语言
迷你语言的命令
迷你程序示例
迷你语言的语法
终点表达式与非终点表达式
程序示例
node类
programnode类
commandlistnode类
commandnode类
repeatcommandnode类
primitivecommandnode类
context类
parseexception类
main类
lhterperter pattern的所有参与者
扩展自我视野的提示
还有其他不同的迷你语言吗
略过/读入
相关pattern
重点回顾和最后的叮咛
练习题
附 录
附录a练习题的解答
附录b gof的设计panern分类
设计模式——Java语言中的应用
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×