设计模式真的是语言弱点吗?

Ewa*_*odd 36 history design-patterns language-design

今天的模式应该被视为Java和C++中的缺陷或缺失功能吗?

  • 子程序是50年代和60年代机器语言的设计模式.
  • 面向对象类是70年代C的设计模式.
  • 访客,抽象工厂,装饰器和外墙是当今Java和C++的设计模式.

    明天的语言会是什么样子?他们会有什么样的模式?

Jul*_*iet 47

一些标准化的设计模式 - 适配器,工厂,命令,访问者等 - 是附加到其他语言的功能的近似.脱离我的头顶:

  • C#中的事件处理程序是观察者模式的烘焙版本.想一想如果每次都要自己动手观察者,如何在C#中连接事件.

  • 访问者模式是多方法,消息转发模式匹配的非常弱的形式的详细近似.

  • 命令模式包含特定的行为,因此您可以在方法之间传递对象,这些方法或多或少地接近第一类函数.

  • 策略模式允许您动态地将行为插入到对象中,以便您可以随时通过将一个行为与另一个行为交换来修改对象.在函数式编程世界中,我们称之为函数组合.

  • 抽象工厂模式接受参数并返回工厂作为结果.通常,您可以将工厂视为函数的基本包装(更具体地说,是构造函数周围的包装器).因此,您将参数传递给函数并获取函数作为结果,使此模式非常类似于currying.

  • 装饰器模式允许您在运行时附加或删除对象的行为.在JavaScript中,由于"原型"OO模型,您可以添加或删除函数而无需显式实现装饰器模式.

因此,我们有一堆模拟其他语言固有特征的设计模式.功能嫉妒并不一定表示语言的弱点 - 它是你需要一遍又一遍地写出的样板代码,它表明了语言的弱点.

  • "明天的超级语言"不能来自今天的语言.它必须是相当不同的 - 否则我们只会使用今天的语言和一些扩展. (3认同)
  • @ S.Lott:"Tomorrows超级语言"可能会出现在技术奇点的转折点,并且,正如我可以想象的那样,将使所有设计模式过时;) (2认同)
  • 我也很喜欢.最后一句话可能是这个问题的最佳答案.我从来没有想到工厂工厂是一种令人难以置信的冗长的形式. (2认同)

Mat*_*nes 18

我不会称它们为缺陷.

高阶语言处理比低阶语言更高级别的概念.从构造角度考虑它.

您可以在炼油厂层面建造一座建筑物,铣削木材,冶炼钢材,然后将建筑物组合在一起.

您可以购买板材和钢梁,并将它们构建成建筑物.

您可以购买预制的墙壁和桁架,并将它们构建到建筑物中.

您可以购买建筑物,然后从内部开始.

正在建造一座建筑物,其中有木板和大梁缺少预制墙的特征,或者在某种程度上有缺陷?


S.L*_*ott 10

在软件设计中做三次或更多次的每一件事都会形成一种模式.

每次重复.每次重复.每次重复.

有些人会用很酷的名字来封印.这些成为设计模式.有意识的重复.

有些只是"最佳实践"或"这对我有用".这些是没有清晰度的设计模式.

有些只是"你经常做的事情".这些是设计模式,没有任何有意识的认识,你在重复自己.

设计模式与语言弱点或不完整无关.他们拥有的一切做的好点子,有意识地重复使用.

今天的设计模式不是明天语言的皇家之路.语言范式并没有通过一系列"以前语言的错误修复"来推进.如果是这样,我们永远不会创建Visual Basic.

与简单的编程语言功能集相比,设计模式是一个更大,更广泛的智能工具.