关于设计模式

120 阅读4分钟

什么是设计模式?

设计模式并非是软件开发的专业术语。实际上,“模式”最早诞生于建筑学。

设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。

通俗一点说,设计模式是在某种场合下针对某个问题的一种解决方案。如果再通俗一点说,设计模式就是给面向对象软件开发中一些好的设计取个名字。

那么给模式一个名字有什么意义呢?实际上给模式取名的意义非常重要。人类可以走到生物链顶端的前两个原因分别是“使用名字”和“使用工具”。在软件设计中,一个好的方案设计有了名字之后,才能被更广泛的传播,更多人分享以及学习。说到底就是为了达成共识,便于在向他人分享这个“好的设计”的时候自然而然的与他们描述,交流。

学习模式的作用

在软件设计中,模式是一些经过了大量实际项目验证的优秀解决方案。熟悉了这些模式的人,对于某些模式的理解也许形成了条件反射,当合适的场景出现时,他们可以很快的采用某种模式作为最优解决方案。也就是所说的经验之谈。

就好比一个熟悉享元模式的人看到了系统中存在一些大量相似的对象,而这些对象给系统的内存带来了较大的负担,那么他会第一时间采用享元模式来解决这个问题。再比如系统中某个接口的结构已经不能满足现在的需求,但是他又不想去改动这个被灰尘遮住的老接口,一个熟悉适配器模式的程序员会很快的采用适配器模式来解决这个问题。

设计模式的适用性

设计模式被一些人认为是夸夸其谈的东西,这些人认为设计模式并没有多大用途,毕竟我们用普通的方法就能够解决的问题,使用设计模式可能会增加复杂度,或许带来一些额外的代码。如果一些设计模式使用不当,事情还有可能变得更糟。

但是软件开发的成本并非全部在开发阶段,设计模式的作用是让人们写出可复用和可维护性高的程序。

假如有一个空间,我们要日复一日的往里面放东西。最简单的办法当然是直接放进去,但是时间久了,就会发现很难在这一堆东西中找到自己想要的东西,要调整几样东西的位置也很难调整。所以在房间里做一些柜子也许是更好的选择,虽然柜子会增加我们的成本,但它可以在维护阶段为我们带来好处。使用这些规则存放东西的规则,或许就是一种设计模式。

在软件生命周期中软件维护工作占到软件生命周期中开发人员所花费工作量的60%左右。可见一个可复用和可维护性高的程序有多么重要。

所有设计模式的实现都遵循一条原则,即“找出程序中变化的地方,并将变化封装起来”。一个程序设计中总是可以分为可变部分和不可变部分。这些变和稳定的部分是非常容易复用的。这也是设计模式为什么描写的是可复用面向对象软件基础的原因。

但是设计模式经常被人们滥用和误用。为什么呢?锤子理论在这里就体现的很明显:当我们有了一把锤子,看什么都是钉子。模式应该用在正确的地方,而不是乱用,滥用。 那么哪些才算是正确的地方,只有在我们深刻理解了模式的意图之后,再结合项目的实际场景才会知道。