标题：Objective-C编程之道：iOS设计模式解析
出版信息
ISBN：9787115265869
定价：59.00元  
作者：[美]Carlo Chung 著
译者：刘威
出版社：人民邮电出版社
出版时间：2011年11月 
版次：1.1
开本：16开
装帧：平装
字数：455千字 
页数：297页
内容简介
《Objective-C编程之道：iOS设计模式解析》是基于iOS的软件开发指南。书中应用GoF的经典设计模式，介绍了如何在代码中应用创建型模式、结构型模式和行为模式，如何设计模式以巩固应用程序，并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。
目录
第一部分　设计模式初体验 
第1章　你好，设计模式　2 
1.1　这是一本什么书　2 
1.2　开始前的准备　2 
1.3　预备知识　3 
1.4　似曾相识的设计　3 
1.5　设计模式的起源——模型、视图和控制器　4 
1.5.1　在模型对象中封装数据和基本行为　4 
1.5.2　使用视图对象向用户展示信息　5 
1.5.3　用控制器对象联系起模型和视图　5 
1.5.4　作为复合设计模式的MVC　5 
1.6　影响设计的几个问题　6 
1.6.1　针对接口编程，而不是针对实现编程　7 
1.6.2　@protocol与抽象基类　7 
1.6.3　对象组合与类继承　8 
1.7　本书用到的对象和类　9 
1.7.1　类图　9 
1.7.2　对象图　12 
1.8　本书如何安排模式的讲解　13 
1.9　总结　13 
第2章　案例分析：设计一个应用程序　14 
2.1　想法的概念化　14 
2.2　界面外观的设计　15 
2.3　架构设计　17 
2.3.1　视图管理　18 
2.3.2　如何表现涂鸦　20 
2.3.3　如何表现保存的涂鸦图　24 
2.3.4　用户操作　27 
2.4　所用设计模式的回顾　32 
2.5　总结　33 
第二部分　对象创建 
第3章　原型　36 
3.1　何为原型模式　36 
3.2　何时使用原型模式　37 
3.3　浅复制与深复制　38 
3.4　使用Cocoa Touch框架中的对象复制　39 
3.5　为Mark聚合体实现复制方法　39 
3.6　将复制的Mark用作“图样模板”　47 
3.7　总结　49 
第4章　工厂方法　50 
4.1　何为工厂方法模式　50 
4.2　何时使用工厂方法　51 
4.3　为何这是创建对象的安全方法　51 
4.4　在TouchPainter中生成不同画布　51 
4.5　在Cocoa Touch框架中应用工厂方法　57 
4.6　总结　58 
第5章　抽象工厂　59 
5.1　把抽象工厂应用到TouchPainter应用程序　60 
5.2　在Cocoa Touch框架中使用抽象工厂　66 
5.3　总结　68 
第6章　生成器　69 
6.1　何为生成器模式　69 
6.2　何时使用生成器模式　70 
6.3　构建追逐游戏中的角色　71 
6.4　总结　79 
第7章　单例　80 
7.1　何为单例模式　80 
7.2　何时使用单例模式　81 
7.3　在Objective-C中实现单例模式　81 
7.4　子类化Singleton　85 
7.5　线程安全　85 
7.6　在Cocoa Touch框架中使用单例模式　86 
7.6.1　使用UIApplication类　86 
7.6.2　使用UIAccelerometer类　86 
7.6.3　使用NSFileManager类　86 
7.7　总结　87 
第三部分　接口适配 
第8章　适配器　90 
8.1　何为适配器模式　90 
8.2　何时使用适配器模式　92 
8.3　委托　92 
8.4　用Objective-C协议实现适配器模式　93 
8.5　用Objective-C的块在iOS 4中实现适配器模式　99 
8.5.1　块引用的声明　99 
8.5.2　块的创建　100 
8.5.3　把块用作适配器　100 
8.6　总结　104 
第9章　桥接　105 
9.1　何为桥接模式　105 
9.2　何时使用桥接模式　106 
9.3　创建iOS版虚拟仿真器　106 
9.4　总结　112 
第10章　外观　113 
10.1　何为外观模式　113 
10.2　何时使用外观模式　114 
10.3　为子系统的一组接口提供简化的接口　114 
10.4　在TouchPainter应用程序中使用外观模式　117 
10.5　总结　119 
第四部分　对象去耦 
第11章　中介者　122 
11.1　何为中介者模式　122 
11.2　何时使用中介者模式　124 
11.3　管理TouchPainter应用程序中的视图迁移　124 
11.3.1　修改迁移逻辑的困难　126 
11.3.2　集中管理UI交通　127 
11.3.3　在Interface Builder中使用CoordinatingController　132 
11.4　总结　135 
第12章　观察者　136 
12.1　何为观察者模式　136 
12.2　何时使用观察者模式　138 
12.3　在模型-视图-控制器中使用观察者模式　138 
12.4　在Cocoa Touch框架中使用观察者模式　138 
12.4.1　通知　139 
12.4.2　键-值观察　139 
12.5　在TouchPainter中更新CanvasView上的线条　140 
12.6　总结　149 
第五部分　抽象集合 
第13章　组合　152 
13.1　何为组合模式　152 
13.2　何时使用组合模式　154 
13.3　理解TouchPainter中Mark的使用　154 
13.4　在Cocoa Touch框架中使用组合模式　163 
13.5　总结　164 
第14章　迭代器　165 
14.1　何为迭代器模式　165 
14.2　何时使用迭代器模式　167 
14.3　在Cocoa Touch框架中使用迭代器模式　167 
14.3.1　NSEnumerator　167 
14.3.2　基于块的枚举　168 
14.3.3　快速枚举　169 
14.3.4　内部枚举　170 
14.4　遍历Scribble的顶点　170 
14.5　总结　178 
第六部分　行为扩展 
第15章　访问者　180 
15.1　何为访问者模式　180 
15.2　何时使用访问者模式　182 
15.3　用访问者绘制TouchPainter中的Mark　182 
15.4　访问者的其他用途　189 
15.5　能不能用范畴代替访问者模式　189 
15.6　总结　189 
第16章　装饰　190 
16.1　何为装饰模式　190 
16.2　何时使用装饰模式　191 
16.3　改变对象的“外表”和“内容”　192 
16.4　为UIImage创建图像滤镜　192 
16.4.1　通过真正的子类实现装饰　193 
16.4.2　通过范畴实现装饰　201 
16.5　总结　206 
第17章　责任链　207 
17.1　何为责任链模式　207 
17.2　何时使用责任链模式　208 
17.3　在RPG游戏中使用责任链模式　209 
17.4　总结　214 
第七部分　算法封装 
第18章　模板方法　216 
18.1　何为模板方法模式　216 
18.2　何时使用模板方法　217 
18.3　利用模板方法制作三明治　217 
18.4　保证模板方法正常工作　224 
18.5　向模板方法增加额外的步骤　225 
18.6　在Cocoa Touch框架中使用模板方法　228 
18.6.1　UIView类中的定制绘图　228 
18.6.2　Cocoa Touch框架中的其他模板方法实现　228 
18.7　总结　229 
第19章　策略　230 
19.1　何为策略模式　230 
19.2　何时使用策略模式　231 
19.3　在UITextField中应用验证策略　231 
19.4　总结　239 
第20章　命令　240 
20.1　何为命令模式　240 
20.2　何时使用命令模式　241 
20.3　在Cocoa Touch框架中使用命令模式　241 
20.3.1　NSInvocation对象　242 
20.3.2　NSUndoManager　242 
20.4　在TouchPainter中实现撤销与恢复　243 
20.4.1　使用NSUndoManager实现绘图与撤销绘图　244 
20.4.2　自制绘图与撤销绘图的基础设施　248 
20.4.3　允许用户触发撤销与恢复　255 
20.5　命令还能做什么　256 
20.6　总结　257 
第八部分　性能与对象访问 
第21章　享元　260 
21.1　何为享元模式　260 
21.2　何时使用享元模式　262 
21.3　创建百花池　262 
21.4　总结　269 
第22章　代理　270 
22.1　何为代理模式　270 
22.2　何时使用代理模式　271 
22.3　用虚拟代理懒加载图像　272 
22.4　在Cocoa Touch框架中使用代理模式　277 
22.5　总结　279 
第九部分　对象状态 
第23章　备忘录　282 
23.1　何为备忘录模式　282 
23.2　何时使用备忘录模式　283 
23.3　在TouchPainter中使用备忘录模式　284 
23.3.1　涂鸦图的保存　284 
23.3.2　涂鸦图的恢复　285 
23.3.3　ScribbleMemento的设计与实现　286 
23.4　Cocoa Touch框架中的备忘录模式　295 
23.5　总结　297