2.3 设计模式的描述
设计模式通常都会用形式化的格式来描述。但不管采用哪种格式,其表达的内容都脱离不了设计模式的几个要素。
描述设计模式的一种常见格式包含以下几个方面。
• 别名(Alias) 该部分指出了相应设计模式的其他名字。
• 背景(Context) 该部分列出了相应设计模式所要解决的问题所产生的背景,或者应用相应设计模式的情景。
• 问题(Problem) 该部分指出了相应设计模式所要解决的问题。
• 解决方案(Solution) 该部分描述了设计模式对相应问题所提出的解决方案。
• 结果(Consequences) 该部分对设计模式进行了评价,主要描述了使用相应设计模式会带来哪些好处以及可能存在哪些弊端。
• 相关模式(Related Pattern) 该部分描述了相应设计模式与其他设计模式之间的关系。
本书第15章就采用了上述这种格式对本书所介绍的12个多线程方面的设计模式进行描述的。不过,这一章采用这种格式进行描述的目的是方便读者在需要时进行快速参考。而为了方便讲解各个设计模式,本书在其他章中使用了以下格式进行描述。
• 简介 该部分主要对相应设计模式的核心思想和本质进行描述,以便读者对其形成基本的认识。
• 架构 该部分会描述相应的设计模式涉及哪些类(参与者)以及这些类之间的关系,并在此基础上描述这些类之间是如何协作从而解决相应的设计模式所要解决的问题的。也就是说,该部分从静态(类及类之间的关系)和动态(类之间的协作)两个角度描述了解决方案,因此被称为架构。
• 实战案例解析 该部分以笔者实际工作经历中应用相应的设计模式所解决过的问题为例,讲解了应用相应设计模式的典型场景(背景)以及相应设计模式是如何解决相关问题的。
• 评价与实现考量 该部分会对相应的设计模式进行评价,分析其优缺点,并对其实现和运用过程中需要注意的一些事项、重要问题及解决方法进行描述。例如,第10章介绍的Thread Specific Storage(线程特有存储)模式可以在不使用锁的情况下保证线程安全。但是其在实际使用过程中却可能导致内存泄漏这样严重的问题。
• 可复用实现代码 该部分会给出相应设计模式的可复用实现代码。编写设计模式的可复用实现代码可以帮助读者进一步理解相应的设计模式及其实现时需要注意的问题。另外,也便于读者在实际工作中运用相应的设计模式。
• Java标准库实例 该部分描述了Java标准库对相应设计模式的使用情况。Java标准库已经实现了本书介绍的部分设计模式,如Promise(承诺)模式(第6章)和Thread Specific Storage(线程特有存储)模式(第10章)。该部分重点讲解的是Java标准库对相应设计模式的使用情况而不是实现情况。
• 相关模式 该部分描述了相应的设计模式与其他设计模式之间的关系。
[1]引自维基百科:“A design pattern is a general reusable solution to a commonly occurring problem within a given context in software design”。
[2]概括为SOLID(Single Responsibility Principle单一职责原则、Open-Closed Principle开闭原则、Liskov Substitution Principle里氏替换原则、Interface Segregation Principle接口隔离原则以及Dependency Inversion Principle依赖倒置原则)原则。
[3]即一块芯片上集成多个处理器。
[4]参见The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software一文。(参见链接[2])