- 设计模式是什么?
优秀的设计范例
从优秀设计方案中发现和总结出来的经验
在实践中反复出现的设计问题的优秀解决方案
设计和开发人员相互交流的基本术语
- 设计模式不是什么?
面向对象设计的框架
可供简单组合的积木式的设计元件
新发明的创新思路和方法
解决面向对象设计问题的完整方案
- 我想学习设计模式,需要具备什么基础呢?
一门面向对象的编程语言
一些面向对象的基本概念
一些基础的UML类图知识
- 那么多模式,我连名字都记不住,怎么学?
模式命名的目的是交流
记不住名称并不影响对模式的学习,只是你在给别人讲你的设计思路时要多啰嗦几句而已
- 模式又按目的分类,又按范围分类,我搞不清楚,而且我认为有的模式在哪个类别中都有一定道理,到底要怎样看待模式的分类呢?
分类不重要
已有的分类只是便于了解模式间的关系
- 模式的类图是一样的,为何却是两种模式呢?
类图只是解决方案的表现形式
模式的目的是解决某一特定的问题
模式是根据其意图命名,而不是解决方案的类图
- 这么多种模式,它们有什么共性吗?
模式的共性就是设计原则,模式是在设计原则的指导下将长期实践的经验整理下来形成的。
设计原则是设计模式之魂
这些原则主要包括:单一职责原则SRP、开发关闭原则OCP、依赖倒置原则DIP、接口隔离原则ISP、里氏替换原则LSP、合成利用原则CARP
- 我看到在实际代码中的实现往往与书中的类图不太相同,这是正确的使用模式吗?
实际的实现当中往往考虑了具体的逻辑环境而进行了微调,这个是合适的,也是提倡的
模式是为了解决问题,而不是让我们按它的类图来实现代码
- 我看到别人的代码既像这个模式又像那个模式,有时甚至是混在一起,这是怎么回事呢?
实际设计中,设计人员往往会进行设计折衷,模式的使用也往往会组合起来,或者进行一些简化。
要的不是模式本身,而是用模式解决实际问题。
- 我负责的代码有限,没有机会做全局性的设计工作,我要怎样学习和使用设计模式呢?
勤于思考,加强理解
在小范围代码中有意识的选择模式使用
向有经验的同学请教用法是否合适
循序渐进
- 总体上说,感觉学习设计模式是一个长期的过程,我怎么知道自己学到什么程度了呢?
可以将学习过程分为三个阶段
阶段一学习一个模式并套用
阶段二发现模式的不适用性并调整
阶段三着眼于实际问题的解决,顺其自然的使用模式
- 设计模式有负面的作用吗?
可以肯定的回答“有”
会引入更多的抽象层次
会引入更多功能简单的小类
会让人走火入魔
……
- 我在选择设计模式时要思考哪些问题?
考虑设计模式是如何解决问题的
浏览模式的意图部分
研究目的相似的模式
考虑你的设计哪些是可变的
明确模式的负面效应
- 我要怎样使用设计模式?
弄清模式的意图并特别注意其适用性部分和效果部分,确定它适合你的问题
弄清结构、参与者和协作部分
看代码示例
选择在应用上下文中有意义的模式参与者的名字。模式中的名字通常过于抽象而不会直接出现在应用中。
定义类及接口,建立它们的关系,定义代表数据和对象引用的实例变量。
实现执行模式中责任和协作的操作,代码示例部分的例子可以提供帮助和指导。
注:这些只对一开始使用模式起指导作用。以后会形成自己的使用方法。
- 使用时还有什么建议吗?
保持简单(如果没用模式解决某个问题,就不是经验丰富的开发人员?)
模式不能解决所有问题
要知道何时需要模式(不仅是使用的时机,还有放弃的时机)
重构是最好的使用模式的时机(重构就是为了改善结构,而不是改变行为)
敢于放弃模式(放弃往往比拿起更难)
如果现在不需要,就不要使用(抗拒诱惑,降低复杂度)
设计模式不等同于软件架构,但设计模式可以在架构进入更详细的设计阶段时发挥作用
——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——