我想知道应该一步一步地分析一个明确定义的问题的方法,以找出可以适合解决方案的可能的设计模式。
您可以推荐哪些指导?
感谢
答案 0 :(得分:8)
任何设计模式存储库都会给你一些提示,例如“这在......时很有用”,但通常没有任何索引可以让你查找“信用卡号”并返回“flyweight对象”。最接近的东西通常是模式的松散分组,如行为,建构等。
在我看来,通过想知道应该应用哪种设计模式来解决问题毫无意义。如果您对模式非常熟悉,您会立即注意到它适用以及如何应用。如果你没有看到合适,那么试图按模式服务只是为了你可以说“我使用模式XX,所以设计必须是好的!”是一个危险的错误。
有些人甚至说设计模式首先是一种形式,表明你的语言不够表达。 (这并不像听起来那么疯狂;考虑到WHILE循环或哈希表之类的东西曾经没有出现在编程语言中,那个时代的主程序员必须一次又一次地重新实现它们;现在它们是语法的一部分,没有人会梦想称他们为“模式”。)我,我不是那种极端主义者;我认为精心挑选的设计模式在你使用它时确实非常有用,因为你确信这是一个很好的解决方案,但这需要你彻底了解它,而根据我的经验,这几乎总是要求你自己练习它。模式的价值在于为经常做的事情提供一个可识别的名称,这样你就可以更好地记住它并与同行沟通。
答案 1 :(得分:1)
设计模式旨在涵盖各种解决问题的任务。因此,在摘要中,您需要有一种方法来表示正在完成的各种工作,以及一种将设计模式与该工作相匹配的方法。这样做通常是“AI-hard”。
“正在完成的工作”的具体表示显然是计算机源代码。现在,设计模式匹配问题是与表现出感兴趣的问题的一组代码片段匹配,并且将“模式”(例如,解决方案)应用为修改源代码以实现期望结果的一组步骤。
可以表达此类模式并影响自动源代码更改的工具是Program Transformation引擎。您通常使用引擎来完成的工作是将大量设计模式集合在一起,将它们实例化为源到源重写规则集,然后将一大块代码交给转换引擎,以便它可以执行模式 - 匹配/替换步骤。当然,最艰苦的工作是将设计模式编码为转换规则,因为大多数设计模式都是用散文编写的,并且往往对精确细节有点模糊。 (程序转换引擎很难构建,但可以说已经完成了:)
程序转换引擎已被用于实现重构(一种众所周知的设计模式类),语言翻译(大规模“设计模式应用程序”)和代码重组,例如重塑API以满足新需求(一个特定示例I已经完成的是自动将C ++代码API转换为CORBA兼容性。)