[英]Singleton class return two different singleton objects
我想设计一个应该返回某个第三方对象的单例的类。 例如,我想创建一个第三方B类对象的单例。 以下是我的设计。
public class A{
private static A A = null;
private static B B = null;
private A() {
B = code to instantiate B Object;
}
public static synchronized A getAInstance() {
if(A ==null){
synchronized(A.class){
if(A == null){
A = new A();
}
}
}
return A;
}
public B getB(){
return B;
}
}
能帮到我,请问这是一个合适的单身人士
如果我正确理解您的问题,您希望拥有第三方类的单个实例。 首先,通过包装类obj(敏捷软件工艺第8章的清洁代码手册)访问第三方obj是一个很好的做法,在你的情况下,类b由类a包装。 为了创建类b的单个实例,你可以将它作为类a的实例变量,然后使类成为单例,代码如下
Public class A{
private static A A = null;
private B B = null;
private A() {
B = code to instantiate B Object;
}
public static synchronized A getAInstance() {
if(A ==null){
synchronized(A.class){
if(A == null){
A = new A();
}
}
}
return A;
}
public B getB(){
return B;
}
}
你可以简单地拥有这种结构。 不需要显式同步,只需将其留给JVM即可。
public class A {
private static class BInstanceHolder {
B BInstance = new B();
}
private A(){}
public static B getB(){
return BInstanceHolder.BInstance;
}
}
如果你只想要一份B副本,就这样做吧! 你甚至不需要A类单身人士。所以你可以尝试:
public final class A{
private A(){}
private static B instance;
static{
instance = code to instantiate B Object
}
public static synchronized B getInstance() {
return B;
}
}
静态块将在首次提到Class时创建B的实例,并将实例化该实例。 构造函数将阻止A的生成,但您仍然可以访问B的唯一实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.