描述
开 本: 20开纸 张: 胶版纸包 装: 精装是否套装: 否国际标准书号ISBN: 9787111759133
序言
前言
读者指南
第1章?引言?┊1
1.1 什么是设计模式?┊3
1.2 Smalltalk MVC中的设计模式?┊4
1.3 描述设计模式?┊6
1.4 设计模式的编目?┊7
1.5 组织编目?┊8
1.6 设计模式怎样解决设计问题?┊10
1.6.1 寻找合适的对象?┊10
1.6.2 决定对象的粒度?┊11
1.6.3 指定对象接口?┊11
1.6.4 描述对象的实现?┊12
1.6.5 运用复用机制?┊15
1.6.6 关联运行时和编译时的结构?┊18
1.6.7 设计应支持变化?┊19
1.7 怎样选择设计模式?┊22
1.8 怎样使用设计模式?┊24
第2章?实例研究:设计一个文档
?编辑器?┊25
2.1 设计问题?┊27
2.2 文档结构?┊27
2.2.1 递归组合?┊28
2.2.2 图元?┊29
2.2.3 组合模式?┊31
2.3 格式化?┊31
2.3.1 封装格式化算法?┊31
2.3.2 Compositor和Composition?┊32
2.3.3 策略模式?┊33
2.4 修饰用户界面?┊34
2.4.1 透明围栏?┊34
2.4.2 MonoGlyph?┊35
2.4.3 Decorator模式?┊36
2.5 支持多种视感标准?┊37
2.5.1 对象创建的抽象?┊37
2.5.2 工厂类和产品类?┊38
2.5.3 Abstract Factory 模式?┊40
2.6 支持多种窗口系统?┊40
2.6.1 是否可以使用Abstract Factory
模式?┊40
2.6.2 封装实现依赖关系?┊41
2.6.3 Window和WindowImp?┊43
2.6.4 Bridge模式?┊46
2.7 用户操作?┊46
2.7.1 封装一个请求?┊47
2.7.2 Command类及其子类?┊47
2.7.3 撤销和重做?┊48
2.7.4 命令历史记录?┊49
2.7.5 Command模式?┊50
2.8 拼写检查和断字处理?┊50
2.8.1 访问分散的信息?┊51
2.8.2 封装访问和遍历?┊51
2.8.3 Iterator类及其子类?┊52
2.8.4 Iterator模式?┊55
2.8.5 遍历和遍历过程中的动作?┊55
2.8.6 封装分析?┊56
2.8.7 Visitor类及其子类?┊59
2.8.8 Visitor模式?┊60
2.9 小结?┊60
第3章?创建型模式?┊62
3.1 Abstract Factory(抽象工厂)—对象
创建型模式?┊66
3.2 Builder(生成器)—对象创建型
模式?┊74
3.3 Factory Method(工厂方法)—对象
创建型模式?┊81
3.4 Prototype(原型)—对象创建型
模式?┊89
3.5 Singleton(单件)—对象创建型
模式?┊96
3.6 创建型模式的讨论?┊102
第4章?结构型模式?┊104
4.1 Adapter(适配器)—类对象结构型
模式?┊106
4.2 Bridge(桥接)—对象结构型
模式?┊115
4.3 Composite(组合)—对象结构型模式?┊123
4.4 Decorator(装饰)—对象结构型
模式?┊132
4.5 Facade(外观)—对象结构型
模式?┊139
4.6 Flyweight(享元)—对象结构型
模式?┊146
4.7 Proxy(代理)—对象结构型
模式?┊155
4.8 结构型模式的讨论 ?┊164
4.8.1 Adapter与Bridge?┊164
4.8.2 Composite、Decorator与Proxy?┊164
第5章?行为型模式?┊166
5.1 Chain of Responsibility(职责链)—
对象行为型模式?┊167
5.2 Command(命令)—对象行为型
模式?┊175
5.3 Interpreter(解释器)—类行为型
模式?┊183
5.4 Iterator(迭代器)—对象行为型
模式?┊193
5.5 Mediator(中介者)—对象行为型
模式?┊205
5.6 Memento(备忘录)—对象行为型
模式?┊212
5.7 Observer(观察者)—对象行为型
模式?┊219
5.8 State(状态)—对象行为型模式?┊227
5.9 Strategy(策略)—对象行为型
模式?┊234
5.10 Template Method(模板方法)—
类行为型模式?┊242
5.11 Visitor(访问者)—对象行为型
模式?┊246
5.12 行为型模式的讨论?┊256
5.12.1 封装变化?┊256
5.12.2 对象作为参数?┊257
5.12.3 通信应该被封装还是被
分布?┊257
5.12.4 对发送者和接收者解耦?┊258
5.12.5 总结?┊260
第6章?结论?┊261
6.1 设计模式将带来什么?┊262
6.1.1 一套通用的设计词汇?┊262
6.1.2 书写文档和学习的辅助
手段?┊263
6.1.3 现有方法的一种补充?┊263
6.1.4 重构的目标?┊264
6.2 本书简史?┊265
6.3 模式界?┊266
6.3.1 Alexander的模式语言?┊266
6.3.2 软件中的模式?┊267
6.4 邀请参与?┊267
6.5 临别感想?┊268
附录A?词汇表?┊269
附录B?图示符号指南?┊273
附录 C?基本类?┊277
参考文献?┊284
让我们直奔主题吧:第 2版的不同点在哪里?
第 2版与第 1版相比,最大的变化是范围不再局限于 Web网站。尽管书中使用的例子大部分仍然与 Web相关,但无论是关注点、概念模型还是设计原则,都可以应用于所有的产品和服务。
我这么做有两个原因,而且都与过去 10年间发生的事情有关。在过去 10年间,无论是用户体验本身还是影响用户体验的要素,都发生了很多变化。
首先,这些年来,我不断地听到有人成功地把用户体验要素的模型应用到与Web无关的产品上。有些人本来是 Web设计师,因为种种原因开始做类似手机应用的新产品;有些人是非 Web产品的设计师,却仍然能将用户体验要素融到他们的工作当中。
而与此同时,用户体验所涉及的领域也大大扩展了。我们现在谈及“用户体验设计的价值和影响力”,早就不再局限于第 1版中所说的“Web产品领域”,甚至也不仅仅局限于“基于屏幕交互的产品领域”。
第 2版秉持近似的观点。如果只考虑模型立足的根源,Web仍然是第 2版所讨论的重点,但本书并不要求你理解 Web页面是如何开发出来的 —所以,即使你从没写过一行 Web代码,也应该可以将其应用到自己的工作当中。
抛开上面这两个原因不谈,对于已经读过第 1版的读者,我希望你知道:第2版不是完全推翻了第 1版重新再造的新模型,它只是对你已经知道(并且希望你能爱上)的、被大家所熟悉的要素模型进行了打磨和提炼,其核心思想和哲学概念是始终如一的。细微之处有少量变化,但大的框架没有改变。
如果这些要素能派上用场,我会感到欣慰。期待接下来的精彩!
Jesse James Garrett
2010年 11月
第 1版前言
这不是一本关于“怎样做(how-to)”的书。有很多讨论如何建设网站的书,这本不是。
这不是一本关于技术的书。在这里你找不到一行代码。
这不是一本有答案的书。相反,这本书说的是“如何提出正确的问题”。
这本书将告诉你,在阅读其他的书籍之前你需要提前了解什么。如果你需要一个大的概念,或者需要了解用户体验设计师所做出的决策的环境,那么这本书很适合你。
这本书经过精心设计,使你可以在一两个小时之内读完。如果你是一个刚刚进入用户体验领域的新手─可能你是一个负责组建用户体验团队的管理人员,或者你是一个碰巧进入这个领域的作家或设计师 ─那么这本书将给你一些基础的概念。如果你已经对设计方法和用户体验领域的关注点很熟悉了,那么这本书将帮助你更有效地把这些概念传达给与你合作的人。
背后的故事
由于被询问得太多,所以我决定把本书的诞生过程写下来。
1999年下半年,我作为第一个信息架构设计师加盟了一个多年做网页设计的顾问公司。我通过很多方式来明确我的岗位职责并向人们不停地讲述我所做的事情是什么、这些事情如何与其他人所做的工作融合到一起等。一开始,他们都十分小心而且还有一点警惕,但是很快他们开始意识到我的存在是为了让他们的工作更容易,而不是更困难。我的出现并不表示他们的权威性降低了。
与此同时,我在编写一个与我工作相关的、我个人用于收藏网上资源的网站(它最终作为 www.jjg.net/ia/的信息架构资源页面而发布在互联网上)。在做这些研究的时候,我总是不断地受到一些基础概念的词汇的困扰,在这个领域中它们看上去很相似但实际上被随意和胡乱使用。某资料中称为“信息设计”的东西很显然和另一个资料所称的“信息架构”完全一样,而第三份资料中把所有这些放在一起称为“界面设计”。
在 1999 年年底到 2000 年 1 月,我强撑着完成了一系列对这些关键议题的一致定义,并找到一种方式来表达它们之间的关系。但是我当时非常忙,被一些正在进行中的工作缠住了,脱不开身,我试着去阐述和说明的那种模型没有真正地在工作中产生效果,所以在 1 月快结束的时候,我放弃了这个念头。
同年 3 月,我到得克萨斯州奥斯汀市参加一年一度的 South by Southwest交互展览。这是忙碌而又发人深省的一周,在此期间我几乎没睡多少觉——大会的议程安排和晚上的活动就像一场耗时两三天的马拉松比赛。
那个星期快结束的时候,我通过奥斯汀机场的安检口准备登上返回旧金山的飞机,这时一个三维的矩阵突然就跳进了我的脑海里,并完全占据了我的整个思绪。在登上飞机之前我一直都耐心地等待着。而在我坐下的同时,我掏出记事本把它画了出来。
回到旧金山之后,由于伤风我几乎立刻就倒下了。我经历了大约一个星期的高烧和谵语。在刚刚感到清醒的时候,我马上把记事本上的草图变成整洁地展现在一张纸上的完整图示。我把它称为“用户体验要素”。后来我听说,这个称呼唤起了大多数人对于“元素周期表”和“Strunk and White”的回忆。不过让大家失望的是,在选择这个标题的时候,我的脑海中完全没有这种联想─之所以从辞典中把“要素(element)”挑选出来,只是为了代替蹩脚的、听上去很技术化的“组件(component)”一词。
3月30日,我把最终的图发布到了网上(你现在仍然可以在 www.jjg.net/ia/elements.pd
评论
还没有评论。