gpt4 book ai didi

java - 空对象 - 要实例化或单例的东西?

转载 作者:行者123 更新时间:2023-11-30 09:31:03 25 4
gpt4 key购买 nike

这更像是一个风格问题,而不是“我有麻烦的问题”。对于 Null 占位符对象(我使用的术语是否正确?),通常首选使用 Singleton 模式吗?为了便于讨论,这里有一个例子:

public interface Foo {
void myMethod();
}

public class RealFoo implements Foo {
void myMethod() { /* Do something productive */ }
}

public class MyUniverse {
public static void main(String args[]) {
Foo[] fooArray = new Foo[10];
// do something productive that might result in Null objects in the array
for (Foo f : fooArray) {
f.myMethod(); // I DONT WANT TO DO if (f != null) blah blah
}
}
}

好的,这就是我的情况,是选择 A 还是 B?

// A
public class NullFoo implements Foo {
public NullFoo() {}
public void myMethod() { /* don't need to do anything */ }
}

// B
public class NullFoo implements Foo {
private static NullFoo _instance = null;
protected NullFoo() {}
public static NullFoo getInstance() {
if (_instance == null) _instance = new NullFoo();
return _instance;
}
public void myMethod() { /* don't need to do anything */ }
}

谢谢!我的直觉认为 B 几乎总是优越的,但也许我遗漏了什么,所以我问...

最佳答案

我会选择后者。在这方面我可能是一个趋势反击者,但我不认为单例天生就是邪恶的。如果类没有可变状态,单例就可以了。

不过,我会将构造函数设置为私有(private)的,而不是 protected 。此外,您的延迟加载很容易发生竞争;我只是在声明行上实例化 NullFoo (private static final Foo instance = new NullFoo();)。最后,不要忘记让类实际实现接口(interface)。 :)

关于java - 空对象 - 要实例化或单例的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com