模式化的过程是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性本质,并找到普遍适用的解决方案的过程。
1.1 模式是什么
人们在自己的环境中不断发现问题和寻找问题的解决方案的时候,发现有一些问题及其解决方案不断变换面孔重复出现,但在这些不同的面孔后面有着共同的本质,这些共同的本质就是模式。
模式所描述的问题及问题的答案都应当是具有代表性的问题和问题的答案。
具有代表性:它以不同的形式重复出现,允许使用者举一反三,将它应用到不同的环境中去。
我个人的理解是即使它们的外在表现是不一样的,但是问题的本质都是一样的,对于软件设计模式着眼点是什么在变化,设计模式就是封装变化,那么问题的本质就是什么在变化,比如策略模式:
- 对于某个类体系任何一个类的某个操作都所不同又可以归结为几种(《Header first设计模式》第一章)
- 排序有多种方式,并且需要可以更换
关注的应该是问题的本质,而不是问题的外在表现。
1.2 软件模式的简史
1987年起源
1.3 模式的起源
建筑的永恒之道
论无名的质(QWAN)
质或无名的质处于核心的地位上。
就是要实现的目标。
论门
“门”是通向”质“的管道。”门“是通过一个普遍的模式语言来体现的,这个模式语言使设计师能够创建多种形式的设计,以满足多方面的需求。
”门“是普遍存在的,是这些模式之间的关系或者模式的”以太“,充满着一个特定的域。
就是设计模式
论道(永恒的道)
利用”道“,从”门“演化到”质“的过程,就是把一些特定的模式按照一定的顺序应用到系统设计上的循序渐进的过程。
不就是在架构系统的时候使用门(设计模式)从总体到局部,逐步设计系统。
1.4 与道家思想的关系
模式理论是一个完整的、不可分隔的整体,不能够将他的理论概括成为一套方法论,而不理会他的哲学观点。
强烈的道家观点
为技术人员写的易经
混沌之死
人脑认识一个客观实体的过程,就是界定一个实体的过程,也就是要给它定出界限。
一个实体是无法与其环境分隔开的,因此,将一个实体局限到一个范围之中的过程,也就是改变它的过程。一个实体一旦被界定,也就不再是原来的那个实体了。
只有在一个实体被界定之后,才会在人脑中产生概念,这就是”名“。
没有观察者的介入,一个被观察的实体是无法界定的。
一个实体被界定的方式可以千变万化,因此同一个实体可以产生不同的”名“。当人们试图界定宇宙的本质时,就会发现一千条、一万条属性,这些都是宇宙被不同的方式所界定的结果。人们所见的万物,都是宇宙的一部分,是人脑将宇宙局限到某一个区域中的结果。
但是我们就是要界定这些,不然软件怎么做出来。
再论无名的质(QWAN)
QWAN是建筑设计依据的原始根据,而这些可以定义的”质“便是一切工程设计的开始。
要明确你设计的软件需要达到什么目标。
再论门
气以”形“体现出来,而”形“便是模式,模式的语言便是”形“的语言。
就是源代码
再论道
建筑风水学与软件分水学
一个软件系统也必定有某些属性仅仅属于其整体,而不存在于其某个部分的情况。
1.5 软件的永恒之道
三论无名的质(QWAN)
一个软件的内在属性不仅仅存在于这个软件之中,而且存在于这个软件与其他软件的相互作用之中,存在于这个软件与计算机外部的世界,特使是用户的相互作用之中。
软件性能要求的可变性、软件的可用性,以及系统的可扩展性、灵活性和可插入性。
三论门
Java源代码
代码模式 设计模式 架构模式
三论道
软件的设计必须从软件的整体属性,也就是QWAN出发,通过性能的分化,形成各个模块、各个用户界面,各个类,以及各个方法。在软件的性能要求发生变化的时候,QWAN是不会变化的。一个软件如果能够保持QWAN,就能保证在变化的世界中保持一个软件设计的稳定性,这就是软件设计的永恒之道。
设计原则
对哲学的呼唤
1.6 模式的要素
- 名字
- 问题:目标和效果
- 环境或初始环境
- 力:一个模式为所得到的好处付出的代价
- 解答:
- 举例
- 末态环境:模式带来的好的和坏的结果
- 推理
- 其他有关模式:
- 已知的应用
1.7 本书讲解模式的格式
- 模式的介绍
- 模式的结构
- 模式的长处和短处
- 模式应该在什么情况下使用
- 关于模式实现的讨论
- 举例
- 相关的模式