memeber字段的基本java设计方法

时间:2015-10-03 08:13:21

标签: java design-patterns

假设您有这个低级工作Java类,其中包含带有输入参数的公共方法和其他私有方法来操作此输入数据。 哪种方法更可取:将输入数据设置为成员字段,因此无需在私有方法之间传递,也不需要将其作为参数传递给私有方法?

2 个答案:

答案 0 :(得分:0)

将参数设置为私有字段会强制API的用户使用某种共享模式。具体而言,用户必须考虑如何在其环境中共享对象,以防止在同时调用API时出现问题。另一个替代方法是让您使用synchronized锁定API的其他用户,以防止API的并发运行,但这是一种更糟糕的方法。

我会继续传递参数,以便你的方法保持可重入。另一种方法是创建一个" per-request" object - 在进入时由API创建的参数持有者对象,用于传递参数。

答案 1 :(得分:0)

这里的问题不是在私有方法之间传递值,而是你如何看待对象的状态。换句话说,实例是否有意义保留您传递的参数的值。

例如,考虑Bob the Builder之后设置的Builder类 - 他修复了很多东西,但是一旦修完了某些东西,它就修复了。它已不再与鲍勃有关。另一方面,他戴着头盔,无论走到哪里都随身携带 - 这是他所在州的一部分:

public class Builder {
    private String name;
    private Helmet helmet;

    public Builder(String name) {
        this.name = name;
    }


    /* Helmet methods - helmet is a data member */

    public void wearHelmet(Helmet helmet) {
        this.helmet = helmet;
    }

    public void adjustHelmet() {
        helmet.adjust();
    }

    public void sayHello() {
        helmet.raise();
    }


    /* Can he fix it? Yes he can! But he doesn't keep it afterwards */

    public void fix(It it) {
        straighten(it);
        paint(it);
        shine(it);
    }

    private void straighen(It it) {
        // implementation
    }

    private void paint(It it) {
        // implementation
    }

    private void shine(It it) {
        // implementation
    }
}