[英]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.