生成自身实例的静态类

时间:2017-11-29 10:29:59

标签: java

在静态方法中实例化自身实例然后使用此对象而不是静态地执行所有操作的缺点是什么?

说我有这样的课程:

public class MyClass {
    private String foo;
    private String bar;

    private MyClass(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public static String concat(String foo, String bar) {
        MyClass myClass = new MyClass(foo, bar);
        return myClass.concatStrings();
    }

    private String concatStrings() {
        return foo + bar;
    }
}

这种模式的好处是我不必将输入参数传递给各种私有方法。我能想到的唯一不好的事情是,创建一个我并不真正需要的对象可能是一个性能问题。但是通过这个非常简单的例子,我只注意到一个真正的差异(在一个快速的junit测试中)与很多迭代(即> = 10 ^ 8)相比,像这样的简单静态类:

public class MyStaticClass {
    public static String concat(String foo, String bar) {
        return foo + bar;
    }
}

是否存在支持或反对这种模式的其他论据?

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是静态使用静态(procedural,有一些disavantages和它harder to test)。大多数情况下,使用静态方法的此实用程序可以替换为其他内容using OOP。所以,我的建议是:

public class MyClass {
    private String foo;
    private String bar;

    MyClass(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public String concatFooBar() {
        return new Concat(foo, bar).getResult();
    }

}

实用程序类:

public final class Concat {
    private String foo;
    private String bar;

    Concat(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    String getResult() {
        return foo + bar;
    }

}