KJW*_*KJW 1 language-agnostic design-patterns
我一直在阅读各种编程风格,如XP(首先编写测试),并且遇到了一本只有设计模式的Java书,看起来像伪代码.
这些设计模式用于什么?在编程环境中设计apttern是指什么是它的应用程序?它是否像用于构建特定于域的应用程序的蓝图?
设计模式是描述常见问题解决方案的方法.它们不是特定的代码段,通常可以以不同的方式实现.
例如,如果以工程学为例,设计模式可能是"轮子".可能有很多种不同类型的车轮,但总的说法是"车轮"保持不变.
在软件开发中,有一些类似的想法可以解决一个常见问题,如果你告诉另一个开发人员你曾经使用过"工厂",他大致知道你的意思,就像工程师大致知道你的意思一样通过"轮子".
因此,设计模式是澄清开发人员之间沟通并充当可重用思想的一种方式.它们有点像更抽象的编程解决方案的库,它们大多数独立于您使用的实际语言.
设计模式是针对常见设计问题的通用可重用解决方案。实际上,我们可以概括为:模式是针对常见问题的通用可重用解决方案。不仅有设计模式,还有编码模式(虽然我们不这样称呼它们,我们称之为习语)、架构模式、用户体验模式、流程模式等。
然而,这个定义有一个小问题:在编程中,我们将常见问题的通用可重用解决方案称为“程序”。所以,换句话来说,如果你有一个重复出现的问题,你就写一个程序,只有当你不会写程序时,那么你才需要一个模式。
因此,另一种定义是:模式是一种您无法编写的程序,因为您的编程语言太弱而无法表达它。
因此,一般来说,在尝试模式之前,您应该尝试使用更好的编程语言。然而,编程语言设计就是权衡:设计一种可以同样好地表达所有问题的编程语言是根本不可能的。因此,在代码中包含一些设计模式是完全可以的,但是不应该包含很多设计模式,并且核心业务逻辑中绝对不应该包含任何模式。这表明您选择了错误的编程语言,并且没有任何模式可以解决这个问题。
这里有一个例子:在汇编编程中,在程序的不同部分之间共享参数化的行为是一个常见的设计问题。有一种设计模式可以解决这个问题:它称为子例程。但在另一种语言中,实际上在几乎所有现代语言中,子例程(有时称为过程、函数、方法、例程、子程序)都内置在语言中。它们不是模式,它们就在那里,甚至没有人再去想它们。因此,如果代码中只有一两个子例程,那就没问题。但如果你有很多这样的东西,组装可能不是正确的选择。
其他一些例子:在基于原型的 OO 语言中,内置了原型模式。在具有多重分派的语言中,内置了访问者模式。在 Ruby 中,没有构造函数,您总是不假思索地使用工厂方法。在基于委托的 OO 语言中,内置了装饰器模式。在具有高阶过程的语言中,内置了迭代器模式。在没有可变状态的语言中,迭代器模式实际上是反模式。
归档时间: |
|
查看次数: |
282 次 |
最近记录: |