既然能够从众多设计模式中选择,那么如何识别哪种设计模式适合自己要解决的问题呢?要弄清楚使用哪种设计模式以及如何将解决方案模板应用于具体问题中,重要的是理解以下指导原则:
1、在不了解模式的情况下不能运用它们。首要的是扩大自己的知识面并采用从抽象到具体的方法来学习模式和原则。实现某种模式的方法有很多。看到的模式的不同实现越多,就越能理解模式的目的以及单个模式能有不同实现。
2、是否有必要引入设计模式的复杂性?通常,开发者在学习设计模式时尝试使用一种模式来解决所有问题。总是需要衡量实现某种模式所需的时间与该模式能够带来的收益。谨记KISS原则:保持简单浅显。
3、将问题泛化,以更抽象的方式识别正在处理的问题。了解每个模式和原则是如何编写的。了解自己要解决的问题是否符合特定模式或原则试图解决的问题。记住,设计模式是高层次的解决方案,试着把问题抽象,而且不要过于关注具体问题的细节。
4、了解具体类似性质的模式以及同组中的其他模式。以前已经使用过某个模式并不意味着在解决该问题时它总是正确的模式选择。
5、封装变化的部分。了解应用程序中什么可能发生变化。如果知道某个特殊的报价折扣算法将随时间变化,那么寻找一种模式来帮助您在不影响应用程序其余部分的情况下改变该算法。
6、在选择好设计模式后,确保在命名解决方案中的参与者时使用该模式的语言及领域语言。例如:如果正在使用策略模式为不同的快递公司计价提供解决方案,那么相应地为它们命名,如FedExShippingCostStrategy。通过结合使用模式的公共词汇表和领域语言,全让代码更具可读性,而且更能够让其他具备模式知识的开发者理解。
就设计模式而言,除了学习之外没有其他替代之法。对每种设计模式了解的越多,在运用它们时就会准备的更好。当遇到一个问题正在寻找解决方案时,扫描一下每种模式的目的,唤起自己的记忆 。
一种很好的学习方法是试着识别.NET框架中的模式。例如:Asp.Net Cache 使用了Singleton模式,在创建新的Guid实例时使用了Factory Method模式,.Net 2 XML类使用Factory Method模式,而 1.0 版本并没有使用。