构建器模式实现C#与JAVA

提问

我看到了JAVA中的Builder模式实现,该实现与其C#版本和Gang of Four书中的“经典”插图不同.

C#-Gang of Four version

Director director = new Director(); 

Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();

Product p1 = director.Make(b1);
Product p2 = director.Make(b2)

爪哇-link

Product p1 = new Product.Builder("p1").Name("Product1").Version("v1").Build();
Product p2 = new Product.Builder("p2").Name("Product2").Version("v2").Build();

当我进入Android开发人员时(我来自.NET世界),我第一次看到JAVA的用法-对我而言,JAVA版本比C#版本更为优雅.

现在,底层实现当然有所不同,在JAVA示例中,Builder是Product的嵌套类,其Build()方法返回其父类的构造实例;上面的C#解释与Abstract Factory更相似.

上面提到的所有内容显然都是2种不同的模式,尽管两者本质上都是结构性的.有谁知道在C#中调用第二个示例是什么?

最佳答案

我已经看到它称为静态生成器或流利的生成器.我建议使用“静态流利的构建器”,因为该模式包括三个不同的元素.

>它构建了一个复杂的产品对象.
>界面流畅.
>作为静态内部类实现.

我将进一步建议,这不是单个模式的C#与Java实现的问题,而是两个不同的模式.您可能会说,任何一种构建器类型(即GOF / Classic或static-fluent)都可以用任何一种语言编码,因为这两种语言都支持必要的功能.也可以说静态流体版本是从经典版本派生的,并且与更通用的构建器模式具有is-a关系. GOF版本可以在大多数面向对象的语言中实现,但是较新模式的静态内部部分并未得到普遍支持,但是就像在另一个答案中提到的C#初始化程序一样,在其他语言中可能存在特定于语言的方法来实现相同的结果也一样

我很好奇为什么不使用静态流利的构建器模式中的director对象来处理排序和相关问题.这就是它存在于GOF模式中的原因.导演可以是静态的,构建器可以作为参数传递.

评论