设计模式的选择和运用法则

既然可以从众多设计模式中选择,那么如何识别哪一种设计模式适合本身要解决的问题呢?要弄清楚使用哪一种设计模式以及如何将解决方案模板应用于具体问题中,重要的是理解如下指导原则:算法

 

一、在不了解模式的状况下不能运用它们。首要的是扩大本身的知识面并采用从抽象到具体的方法来学习模式和原则。实现某种模式的方法有不少。看到的模式的不一样实现越多,就越能理解模式的目的以及单个模式能有不一样实现。设计模式

二、是否有必要引入设计模式的复杂性?一般,开发者在学习设计模式时尝试使用一种模式来解决全部问题。老是须要衡量实现某种模式所需的时间与该模式可以带来的收益。谨记KISS原则:保持简单浅显。框架

三、将问题泛化,以更抽象的方式识别正在处理的问题。了解每一个模式和原则是如何编写的。了解本身要解决的问题是否符合特定模式或原则试图解决的问题。记住,设计模式是高层次的解决方案,试着把问题抽象,并且不要过于关注具体问题的细节。学习

四、了解具体相似性质的模式以及同组中的其余模式。之前已经使用过某个模式并不意味着在解决该问题时它老是正确的模式选择。ui

五、封装变化的部分。了解应用程序中什么可能发生变化。若是知道某个特殊的报价折扣算法将随时间变化,那么寻找一种模式来帮助您在不影响应用程序其他部分的状况下改变该算法。设计

六、在选择好设计模式后,确保在命名解决方案中的参与者时使用该模式的语言及领域语言。例如:若是正在使用策略模式为不一样的快递公司计价提供解决方案,那么相应地为它们命名,如FedExShippingCostStrategy。经过结合使用模式的公共词汇表和领域语言,全让代码更具可读性,并且更可以让其余具有模式知识的开发者理解。ip

 

就设计模式而言,除了学习以外没有其余替代之法。对每种设计模式了解的越多,在运用它们时就会准备的更好。当遇到一个问题正在寻找解决方案时,扫描一下每种模式的目的,唤起本身的记忆 。开发

一种很好的学习方法是试着识别.NET框架中的模式。例如:Asp.Net Cache 使用了Singleton模式,在建立新的Guid实例时使用了Factory Method模式,.Net 2 XML类使用Factory Method模式,而 1.0 版本并无使用。模板