Language agnostic 语言集成设计模式

Language agnostic 语言集成设计模式,language-agnostic,design-patterns,oop,Language Agnostic,Design Patterns,Oop,我注意到,对于初学者来说,开始使用设计模式是相当困难的。理解设计模式结构需要很多时间。将设计模式应用到实践中也需要很多时间。同意,若你们不熟悉不同类型的设计模式,你们第一次就看不到它们之间的差异。如果您的类具有合适的名称,那么这个问题就部分解决了。此外,如果您偶然丢失了一些编写代码的规则,或者您在设计模式方面没有太多经验,那么您也可以打破您实现的设计模式类结构。编译器可以保护您并帮助您实现接口-如果您不实现接口,则无法编译应用程序。这是一种安全的好方法。当你实现设计模式类时,编译器是否也能保护你

我注意到,对于初学者来说,开始使用设计模式是相当困难的。理解设计模式结构需要很多时间。将设计模式应用到实践中也需要很多时间。同意,若你们不熟悉不同类型的设计模式,你们第一次就看不到它们之间的差异。如果您的类具有合适的名称,那么这个问题就部分解决了。此外,如果您偶然丢失了一些编写代码的规则,或者您在设计模式方面没有太多经验,那么您也可以打破您实现的设计模式类结构。编译器可以保护您并帮助您实现接口-如果您不实现接口,则无法编译应用程序。这是一种安全的好方法。当你实现设计模式类时,编译器是否也能保护你?看,很多编程语言都支持“foreach”语句。编程语言是否能为工厂、桥梁、代理、纪念品等提供支持?如果这可能是真的,您可以使用如下内容来应用抽象和具体的工厂模式(我更喜欢C#作为伪代码的基础语言;假设使用上下文关键字):


它认为它可以帮助您理解新的源代码并保持应用程序源代码结构的完整性。您对此有何看法?

如果我理解您的意思,您认为新的语言功能应该能够克服对通常与实现设计模式相关联的样板代码的需求

这已经发生了,这不是什么新鲜事

以单例为例,它是最著名的模式之一。每个人都知道如何实现它:声明构造函数
private
,将对象的一个全局实例作为
静态
属性,并添加一个
公共
方法来检索它

这是相当多的概念上非常简单的代码行

在Scala中,创建单例不需要任何样板文件。为了补充
关键字,Scala有一个
对象
关键字,它声明了一个单例对象:

object MainApp {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}

在运行时,将有一个
MainApp
的单个全局实例。无需使用
new
对其进行实例化;事实上,你根本不能使用新的MainApp。

如果我理解你的意思,你认为新的语言特性应该克服通常与实现设计模式相关联的样板代码的需要

这已经发生了,这不是什么新鲜事

以单例为例,它是最著名的模式之一。每个人都知道如何实现它:声明构造函数
private
,将对象的一个全局实例作为
静态
属性,并添加一个
公共
方法来检索它

这是相当多的概念上非常简单的代码行

在Scala中,创建单例不需要任何样板文件。为了补充
关键字,Scala有一个
对象
关键字,它声明了一个单例对象:

object MainApp {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}

在运行时,将有一个
MainApp
的单个全局实例。无需使用
new
对其进行实例化;事实上,您根本不能使用新的MainApp。

有一种观点认为,一种语言中存在设计模式表明了该语言本身设计的弱点,下一代语言应该学习上一代语言中常见的设计模式

例如,请参阅Peter Norvigs关于设计模式在动态语言中不可见的内容

事实上,很容易找到已经发生的这个过程的例子——正如您所说,foreach循环可以说是嵌入式迭代器,Ruby有一个单例混合继承,任何具有多方法的语言都不需要访问者模式。Groovy有内置的构建器

您的特定工厂示例听起来有点像将依赖项注入集成到语言规范中

当然,到目前为止,类型检查器只能确保代码的正确性。而将设计模式嵌入到语言中并不能免除对核心概念的熟悉,也不能免除对手头问题的应用程序的认真思考


您的示例很有趣,您建议在语言中添加几个关键字和规则(我对C#不太熟悉),但这些并没有明显的好处。“factory”关键字会告诉类型检查器(或另一个程序员)什么?如果不清楚是否将“AF”声明为Java接口的等价物,并使用“product”作为其方法的返回类型?

有一种观点认为,语言中设计模式的存在表明了语言本身设计的弱点,下一代语言应该学习上一代语言中常见的设计模式

例如,请参阅Peter Norvigs关于设计模式在动态语言中不可见的内容

事实上,很容易找到已经发生的这个过程的例子——正如您所说,foreach循环可以说是嵌入式迭代器,Ruby有一个单例混合继承,任何具有多方法的语言都不需要访问者模式。Groovy有内置的构建器

您的特定工厂示例听起来有点像将依赖项注入集成到语言规范中

当然,到目前为止,类型检查器只能确保代码的正确性。而将设计模式嵌入到语言中并不能免除对核心概念的熟悉,也不能免除对手头问题的应用程序的认真思考

你的
single public Factory
    methods:
        T Get[T]
public class ConcreteFactory : Factory {
    public Product1 GetProduct1() { ... }
    public Product2 GetProduct2() { ... }
};
  Product1 GetProduct1 { new ConcreteProduct1 }  

  Product2 GetProduct2 { new ConcreteProduct2 }