这两种设计模式有名称吗?

时间:2013-12-31 09:26:43

标签: design-patterns

我想知道这些是否会被视为两种设计模式,更重要的是,它们的名称是什么。

在这个极其简单的例子中,它们似乎以相同的结果有效地结束。主要区别在于,一个人就地修改了参数,而另一个根据参数返回某事

模式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 。我不确定他们为什么会这么做,但很难解释样式/设计模式之间的区别,而没有一些好的第三方文档可供参考(对于双方来说)。

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的实现。