Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1800760
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-25 19:30:15

模式的定义:模式是在某情境(context)下,针对某问题的某种解决方案。

模式的定义其实并没有很好地描述模式。定义中三个要素是“问题”、“情境”和“解决方案”。考虑下面的例子:

问题:我要如何准时上班?

情境:我将钥匙锁在车里了。

解决方案:打破窗口,进入车内,启动引擎,然后开车上班。

这样是一个模式吗?不是。因为一再地打破车窗称不上一个可以反复应用的解决方案。同时这种解决方案别人也不容易采用。其次,它没有一个名字。


一个更好描述模式的方式是“模式类目”,它需要一个模式描述出以下元素:

名称:好的名称可以使模式成为开发人员之间的共享词汇的一部份。

意图(Intent):简短地描述该模式的作用。也可以看作是模式的定义。(问题、情境和解决方案)

动机(Motivation):给出了问题以及如何解决这个问题的具体场景。

适用性(Applicability):描述模式可以被应用在什么场合。

结构(Structure):提供了图示,显示出参与此模式的类之间的关系。

参与者(Participants):描述在此设计中所涉及到的类和对象在模式中的责任和角色。

协作(Collaborations):告诉我们参与者如何在此模式中合作。

结果(Consequences):描述采用此模式之后可能产生的效果,好的与不好的。

实现(Implementation):提供了你在实现该模式时需要使用的技巧,以及你应该小心面对的问题。

范例代码(Sample Code):提供代码的片段,可能对你的实现有帮助。

已知应用(Known Uses):用来描述已经在真实系统中发现的模式例子。

相关模式(Related Patterns):描述此模式和其他模式之间的关系。


模式的分类

创建型:涉及到将对象实例化,这类模式者提供一个方法,将客户从所需要实例化的对象中解耦。(Singleton、Abstract Factory、Factory Method、Builder、Prototype)

行为型: 涉及到类和对象如可交互及分配职责。(Template Method、Command、Iterator、Observer、State、Strategy、Visitor、Mediator、 Interpreter、Memento、Chain of Responsibility)

结构型:把类或对象组合到更大的结构中。(Decorator、Composite、Adapter、Proxy、Facade、Flyweight、Bridge)


使用模式的指南:

简单才是王道。如果你不用模式就能够设计出更简单的方案,那就去干吧。需要的时候把模式从设计中删除。

为实际需要的扩展使用模式。不要只是为了假想的需要而使用模式。

模式是工具而不是规则,需要被适当地调整以符合你的需求。

重构的时间就是模式的时间。


模式是被发现的,而不是被发明的。


反模式告诉你如何采用一个不好的解决方案解决一个问题。有些模式看起来很好,但是真正采用时会带来麻烦。通过将反模式归档,可以帮助人们在遇到问题时避免使用该模式。


不同领域中的模式:

架构模式:用来建立生气勃勃的建筑、城镇和城市的架构。这也正是模式开始的地方。

应用模式:是建立系统级架构的模式。许多多层的架构都属于这一类目。(如C/S和MVC)

领域特定模式:关注特定领域的问题,例如并发系统或实时系统。(如J2EE)

业务流程模式:描述业务、顾客和数据之间的交互,此种模式能够处理如“如何有效决策并沟通决策”之类的问题。(项目管理)

组织模式:描述了人类组织的结构以及实践。到目前为止大多数努力聚集于制造或支持软件的组织。

用户界面设计模式:致力于解决设计交互式软件时的问题。

阅读(903) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~