16.5. 总结

我们研究了两种最常用的模式 —— 不仅在 C++ 中,而且在软件设计领域普遍存在。适配器模式为解决一大类设计挑战提供了一种方法。这些挑战仅有一个最普遍的共同点 —— 给定一个类、函数或提供特定功能的软件组件。这里必须解决一个特定问题,并为另一个相关但不同的问题构建解决方案。装饰器模式在很多方面是适配器模式的一个子集,限制为仅在类或函数的现有接口上增加新的行为。

我们已经看到,适配器和装饰器所进行的接口转换和修改,可以应用于程序生命周期的各个阶段的接口 —— 尽管最常见的用途是修改运行时接口,以便类可以在不同的上下文中使用,但也存在用于泛型代码的编译时适配器,使我们能够将一个类用作构建块或更复杂类的组成部分。

适配器模式可以应用于,许多截然不同的设计挑战。这些挑战的多样性以及模式本身的通用性,所以存在替代解决方案。此类替代方案常常采用完全不同的方法 —— 使用完全不同的设计模式 —— 但最终提供类似的行为。差异在于所选设计方法带来的权衡、附加条件和限制,以及以不同方式扩展解决方案的可能性。为此,本章对同一问题的两种截然不同的设计方法进行了比较,并全面评估了两种选择的优缺点。

下一章,即倒数第二章,将介绍一种规模大、结构复杂且包含多个交互组件的模式 —— 一个适合作为压轴大戏的模式 —— 访问者模式。