①设计过程很复杂
设计软件的过程很复杂和困难,必须找到相关的对象,以适当的粒度将它们归类,再定义类的继承关系和接口,建立对象之间的基本关系。
②设计要求很困难
软件设计,应该对手头的问题有针对性,同时还要对将来的问题和变化的需求有足够的通用性,希望避免重复设计或者尽可能少的重复设计。
③完成设计要多次
有经验的设计者会告诉你,一下子做出复用性和灵活性好的设计,即使不是不可能的但至少也是非常困难的,一个好的设计在最终完成之前,常要被迭代好几次,每一次都有所修改。
①内行设计者的经验
面对设计问题,有经验的设计者的确能做出比较良好的设计,而新手则面对众多选择无从下手。内行设计者知道:不是解决任何问题都要从头做起,他们更愿意复用以前使用过的解决方案;当找到问题的一个好的解决方案,他们会一遍又一遍地使用它。你以后会在众多面向对象的系统中看到许多类和对象之间的重复模式,这些模式解决系统中特定的设计问题,重复使用它们,会使设计更优雅、更灵活、复用性更好。这些模式能帮助设计者,将新的设计问题建立在以前设计经验的基础上,不用从头开始重新做新的设计方案,而是直接复用以往成功的设计方案。
②设计经验的记录
我们都知道设计经验很重要,但我们曾经有过多少次这样的感觉:在开发一段代码时,感觉以前你已经解决过了这样一个问题,但不确切知道或记得以前是在什么地方、怎么解决这个问题的?如果你当时能详细地记录下以前问题的细节和怎么解决的,在这里就可以直接复用这段代码,而不需要重新设计从头开发。但可惜当时你没有记录下来。
①设计模式的意图
设计模式,就是将面向对象系统比较成功的设计经验,按可有效利用的统一模板记录下来,方便在以后新的设计工作中复用它们,帮助设计者更好更快地完成系统设计。
②设计模式的模板
一个好的记录设计经验的模板,能够帮助新系统设计更容易地理解其针对的特定问题和设计思路,也能够帮助设计者做出更有利于系统复用的设计选择,同时能够提高现有系统的文档管理和系统维护的有效性。
①设计模式的收录范围
本书收录的设计模式,仅仅收录那些在不同领域系统中一些重要的和重复出现的成功设计,不收录新的、未经证实的设计经验。
本书收录的设计模式,没有收录那些针对特定应用领域的设计模式,比如没有收录与并发式/分布式/实时应用程序有关是设计模式,没有收录在怎么构造用户界面、怎么写设备驱动程序、怎么使用面向对象数据库等方面的设计模式。这些特定应用领域,都有属于自己领域的专属设计模式,收录、分类、编目这些设计模式也很有意义。



