【发布时间】:2017-07-07 10:02:48
【问题描述】:
假设我有一个如下所示的类:
class Data
{
public Data()
{
// Stuff
}
public void Process1()
{
// Stuff
}
public void Process2()
{
// Stuff
}
}
我有几个如何使用它的选项。最常见的如下:
var data = new Data();
data.Process1();
data.Process2();
我喜欢使用的一种替代方法需要我修改类:
class Data
{
public Data()
{
// Stuff
}
public Data Process1()
{
// Stuff
return this;
}
public Data Process2()
{
// Stuff
return this;
}
}
然后我可以这样使用它:
var data = new Data().Process1().Process2();
这种写作风格的类属于哪种设计模式(如果有的话)?
【问题讨论】:
-
恕我直言,这不是 GOF 设计模式,它更像是简单的方法链...
-
@Fabjan 虽然语法非常简洁。
-
@Fabjan 是什么阻止您使用普通语法做同样的事情?
var data = new Data(); data.Process1(); data.Process2(); data.Process1(); data.Process2(); // etc。任何和所有设计模式都必须负责任地使用才能有效。 -
在我看来,流式接口上的方法应该返回源对象的新实例,其状态由该方法更新。否则很容易写出误导性的代码。 LINQ 正确地做到了——例如,在可枚举上调用
.Where不会改变可枚举,而是返回一个新的。这是编写流畅界面的最佳方式。当你看到return this;时,我会认为它是代码异味。
标签: c# oop design-patterns