现如今,设计模式已经较前两年失去了一些关注度和热度。人们已经把目光投向那些革命性的高科技产品和技术,诸如:iPhone,iPad,云计算,云平台,HTML5等等。但是我认为,不管时间如何变化,软件设计思想永远随着时间推移而被人们继承和发扬光大。
生活中的很多经验,都是历经风雨沧桑,被人们所接受认知并流传至今。比如:“磨刀不误砍柴工”,“织网捕鱼”,“是骡子是马,拉出去遛遛”等。不管咋样,本质思想是不变的。设计模式也是这样,本质就是那些成功软件设计师们的宝贵经验,是经过大量实践,总结归纳来的。既然生活经验可以积累继承,那设计模式也可以在程序设计和开发方面供我们使用。
那什么是设计模式?我们不需要那些抽象概念,只要记住是一种解决问题的思路,是复杂问题的简单解决方法就可以了。这只是宏观上对他进行说明。具体说就是:设计模式是对于在某种环境下软件设计问题上的可重用的解决方案,目的就是要充分利用已有的软件开发经验,解决不同问题。在软件开发设计的时候我们也是不断思考,实践,归纳总结得到一种行之有效的方法,遇到具体问题,拿过来套用把问题解决掉。
模式不是发明与创造,而是来自我们日常设计开发中的发现与总结,是一种实践经验的积累,最终促使我们走向成熟。
设计模式种类很多,包括分布式编程模式,用户界面模式,数据模型模式三大类。目前比较流行的是面向对象设计模式GoF(Gang of Four的缩写)模式,翻译出来比较邪恶“四人帮”,另一个是GRASP(General Responsibility Assignment Software Pattern)称为通用职责分配软件模式。
GRASP与其说他是模式,不如说他是原则和设计要求。他是干啥的?引用一段文档上的话很贴切,“GRASP的核心是自己干自己的事,自己只干自己的事,也就是职责分配和实现高内聚。用来解决面向对象设计的一些问题”。
在OOD中GRASP包括九大设计原则:
- 低耦合(Low Coupling)
- 高内聚(High Cohesion)
- 信息专家(Information Expert)
- 创建者(Creator)
- 控制器(Controller)
- 多态(Polymorphism)
- 纯虚构(Pure Fabrication)
- 间接(Indirection)
- 受保护变化(Protected Variation)
GoF模式,众所周知包括23种设计模式。
- 根据目的准则分类
- 创建型(Creational)
- 结构型(Structural)
- 行为型(Behavioral)
- 根据范围准则分类
- 类模式
- 对象模式
GRASP原则着重考虑设计类的原则及如何分配类的功能,而GoF模式则着重考虑设计的实现、类与类的交互及软件质量。所以GoF模式是符合GRASP原则的面向对象设计模式。