我想知道这些是否会被视为两种设计模式,更重要的是,它们的名称是什么。
在这个极其简单的例子中,它们似乎以相同的结果有效地结束。主要区别在于,一个人就地修改了参数,而另一个根据参数返回某事。
模式1
// Modifies the Object in-place
function foo(a):
a.some_field += 1
foo(a)
模式2
// A very generic implementation
function bar(int):
return int += 1
a.some_field = bar(a.some_field)
// Or, at least a more generic implementation
function baz(a):
a.some_field += 1
return a
a = baz(a)
问题理由
我问的原因是我倾向于遵循模式2 。它通常比这个例子复杂得多(例如文本分析)。可能存在不同类的各种对象,如果它们包含String,则可以在库中运行它们,通常不会自己修改库。
我在模式2 中看到的主要好处是它看起来更可测试,通用,更容易模块化。我曾与开发人员(特别是Java开发人员)合作,他们倾向于使用 Pattern 1 。我不确定他们为什么会这么做,但很难解释样式/设计模式之间的区别,而没有一些好的第三方文档可供参考(对于双方来说)。
答案 0 :(得分:0)
我不知道其中任何一个都足够大,可以真正称为“设计模式”,或者已经给出了这样的名称,但第二个用于OO编程以启用Method Cascading ,这有助于启用Fluent Interface。
对于一个完全人为的例子,如果你有一个定义的对象(在Java语法中,但同样适用于其他OO语言)
public class A {
private int x = 0;
private int y = 0;
public A foo() {
x += 1;
return this;
}
public A bar() {
y += 1;
return this;
}
public int baz() {
return x+y;
}
}
您可以创建一个此类型的对象,并将“链”方法调用为:
int a = new A().foo().bar().baz();
虽然模式不需要(并且未在此处引用的维基百科文章的示例中使用),但这种API风格经常用于Builder Pattern的实现。