7 种设计模式:Abstract Factory、Singleton、Decorator、Facade/Session Facade、Mediator、Observer 和 Intercepting Filter。目前总结出的设计模式远远不止这些,除了 23 种 GoF 模式外,很多学者都在这方面进行了有益的尝试,总结出了大量良好设计的范例。
学习设计模式最重要的是理解,而不是生搬硬套。每种设计模式中都包含着良好的设计架构的思想,如隐藏内部细节、降低耦合度等,越是复杂的系统越需要这些思想的支撑。观察人类社会就可以发现很多与设计模式相同的地方。每一个人都是一个封装良好的对象,通过感官和行动提供了与外界沟通的媒介。人类对外接收消息的方式不过是视觉、听觉、嗅觉、触觉等有限的几种,但这些感觉器官封装了内部复杂的结构;可以使用望远镜、电话或其他的工具来扩展能力;对于人类的复杂组织,有间接沟通的渠道,中介所提供了交流的平台;新闻机构则可以让人们随时了解其他人和事的最新状态……类似的例子还可以举出来很多,如经纪人与 Proxy 模式非常相近,而绝大多数的组织看起来都像 Composite。软件系统的最终目的是辅助人类的活动,以良好的方式抽象现实世界才可以获得良好的设计,单纯的死记硬背这些模式不会有任何价值,与实际情况相联系才能得出易维、护易复用的系统来。
在使用中,经常会把几种模式综合起来解决复杂的问题,例如 10.2.7 中提到的Intercepting Filter 和工厂模式的结合。这需要系统架构设计师具体问题具体分析,综合利用设计模式消除系统中的混乱与耦合,提高系统复用性。
要切记不能滥用设计模式,尤其在一些简单系统中。如果系统中的对象都用工厂模式创建、系统中的工具类都设计成 Singleton、两个对象间的通信还要硬加上一层Mediator 等都是不可取的,只能毫无价值地提高系统复杂度,反而不利于系统的理解与维护。除最初的设计外,重构也是一个很好的时机,系统架构设计师可以在重构的时候根据需要逐步应用设计模式改良系统,提高系统的维护性和复用性。