设计模式简谈
最初,你可以将模式视为解决特定类问题的一种特别巧妙且有深刻见解的方法。这就像前辈已经从所有角度去解决问题,并提出了最通用,最灵活的解决方案。问题可能是你之前看到并解决过的问题,但你的解决方案可能没有你在模式中体现的那种完整性。
这就是为什么有"GoF"中有23种方法,这些方法都是为了解决特定问题而产生的。
从更深入的角度来看,模式的基本概念也可以看作是程序设计的基本概念: 添加抽象层。当你抽象一些东西的时候,就像在剥离特定的细节,而这背后最重要的动机之一是: 将易变的事物与不变的事物分开。
与其说是分开,不如说:抽象是将变化与不变隔离开。就像分层模型一样,对于上层而言,抽象封装了细节,将变化再次变成不变。有点哲学意味上的变化与不变是统一的。
一旦你发现程序的某些部分可能因某种原因而发生变化,你要保持这些变化不会引起整个代码中其他变化。如果代码更容易理解,那么维护起来会更容易。这也就是变于不变。
通常,开发一个优雅且易维护设计中最困难的部分是发现变化的载体(也就是最易改变的地方)。这意味着找到系统中最重要的变化,换而言之,找到变化会导致最严重后果的地方。一旦发现变化载体,就可以围绕构建设计的焦点。
因此,设计模式的目标是隔离代码中的更改。如果以这种方式去看,你已经在本书中看到了设计模式。例如,继承可以被认为是一种设计模式(虽然是由编译器实现的)。它允许你表达所有具有相同接口的对象(即保持相同的行为)中的行为差异(这就是变化的部分)。组合也可以被视为一种模式,因为它允许你动态或静态地更改实现类的对象,从而改变类的工作方式。
因此,在编程领域,设计就是应对变化。而非直觉上的设计领域。
评论已关闭