Objective-C编程之道:iOS设计模式解析(解析iOS设计模式的开山之作)

更多详情

内容简介: 《Objective-C编程之道:iOS设计模式解析》是基于iOS 的软件开发指南。书中应用GoF 的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC 在CocoaTouch 框架中的工作方式。
《Objective-C编程之道:iOS设计模式解析》适用于那些已经具备Objective-C 基础、想利用设计模式来提高软件开发效率的中高级iOS 开发人员。

目录: 《Objective-C编程之道:iOS设计模式解析》
第一部分 设计模式初体验
第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

前言: 拥有超过20万个应用(且每秒都在增加)可供用户随意下载,苹果公司的应用商店(App Store)影响着各行各业。苹果公司广告语“There’s an app for that”(总有一款应用可以做这个)的效应绝对不容忽视。不管你信不信,在这4个月里,我是坐在沙发上用iPad完成了本书的大部分内容。
每天都有更多的iOS开发者想跟随潮流,用下一个杀手级应用发家致富。截至本书写作时,全世界已有超过5万名iOS开发者,而且这一数字还在迅速增长。如果你真的有意从事iOS开发,并想通过好的软件设计原则让开发工作更加高效,那么你应该读这本书。
身为iOS开发者,我了解开发应用程序的痛苦与收获。学习新的编程语言绝非易事。最终,我们学会了并开始开发应用程序。在考虑Cocoa Touch框架时,即使是经验丰富的开发者也很容易被它优美的设计与结构所打动。这种优美来自设计者的深思熟虑,通过把各种为人熟知(或不为人知)的设计模式应用到框架的各种基础结构之中,他们为你我这样的第三方开发者提供了很好的可扩展性与灵活性。框架的大部分在一遍又一遍地重用相同的模式,后来添加到框架的新元素可以很容易地被其他应用程序开发者理解,不用再经过一次艰难的学习。
理解Cocoa Touch框架中使用的模式只是第一步。如果不花时间进行项目的设计,有了杀手级应用的想法马上就开始编码,那么随着后来为它添加更多的功能,它就会变成一个巨大的“樟脑球”。这样,最糟糕的情况是,它变得无法管理,而你(或团队中其他开发者)则根本无法理解你的代码。最终你将花更多的时间去修改代码缺陷,而不能专注于新的改进。
要充分利用Cocoa Touch框架,应该对设计模式有深刻理解,并在实现中进行恰当应用。本书受到Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(常被称作GoF)的经典著作Design Patterns:Elements of Reusable Object-Oriented Software 的启发。本书的每一章,模式的详细讲解中都引用了该书的定义。
今天,我们理解了在很多软件项目中使用设计模式的重要性。Cocoa Touch框架的大部分是用Objective-C写的,本书写作时,市面上还没有讲解如何用Objective-C语言实现设计模式的书。本书旨在成为该主题的第一本权威指南,引导大家了解该如何在iOS平台上以Objective-C语言实现Cocoa Touch开发所要用到的传统设计模式。
作为iOS开发者,你肯定想让开发更容易,是吧?如果不了解应用程序软件设计的最佳做法,开发过程将会困难重重,甚至最终毫无结果。而且,总的来说,想要跟上App Store或软件市场快节奏的变化,重用那些开发好并经过验证的模块非常关键。
用一点儿耐心来理解本书的内容,尽量在实际项目中应用这些模式,读者很快就能体验到设计模式的好处。
我为本书建了一个网站,www.objective-c-design-patterns.com。上面有与本书相关的一些其他信息。也欢迎大家登录网站,分享在项目中使用设计模式的成功事例以及遇到的困难。本书的源代码可从www.apress.com 下载。
祝编码愉快!
Carlo Chung
钟冠贤
2011年3月

媒体评论: “每学习一门新的编程语言,我都会去买一本介绍其设计模式的书。这些书从来没有让我失望过。从长远来看,我获得的回报十倍于我的付出,本书也不例外。作者 首先介绍每一种设计模式的理论和方法,然后给出代码示例。简单地讲,本书结构清晰,易于理解,物超所值。”
——亚马逊读者评论
“这是一本启人深思的书。在学习如何将设计模式应用于复杂的iOS应用的同时,我开始静下来思考怎样优化既有代码。向每一位中高级iOS开发人员推荐本书。”
——亚马逊读者评论