構造方法私有化,也就是,說構造方法是私有的。比如:
class Singleton{
private Singleton(){}//構造方法進行了封裝,私有化
public void print (){
System.out.println("Hello World!");
}
};
我們不能在外部執行個體化這個Singleton對象的類!比如:
public class SingletonDemo02{
public static void main(String args[]){
Singleton s1=null;//聲明對象
s1=new singleton();//錯誤,無法執行個體化對象
}
}
如果我們想要在Singleton類的外部類中使用Singleton類對象的話,隻能再Singleton類中執行個體化一個Singleton類的對象,并将執行個體化對象聲明為static類型,這樣就可以通過類名直接通路。如下:
class Singleton{
static Singleton instance = new Singleton() ; // 在内部産生本類的執行個體化對象
private Singleton(){ // 将構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
public class SingletonDemo04{
public static void main(String args[]){
Singleton s1 = null ; // 聲明對象
s1 = Singleton.instance ; // 取得執行個體化對象
s1.print() ; // 調用方法
}
};
以上代碼還不是最優的,屬性最好被封裝,是以instance最好被聲明為private,然後通過靜态方法來取得instance對象。
class Singleton{
private static Singleton instance = new Singleton() ; // 在内部産生本類的執行個體化對象
public static Singleton getInstance(){ // 通過靜态方法取得instance對象
return instance ;
}
private Singleton(){ // 将構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
public class SingletonDemo05{
public static void main(String args[]){
Singleton s1 = null ; // 聲明對象
s1 = Singleton.getInstance() ; // 取得執行個體化對象
s1.print() ; // 調用方法
}
};
那麼這樣做有什麼好處呢?請先看下面一段代碼:
class Singleton{
private static Singleton instance = new Singleton() ; // 在内部産生本類的執行個體化對象
public static Singleton getInstance(){ // 通過靜态方法取得instance對象
return instance ;
}
private Singleton(){ // 将構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
public class SingletonDemo05{
public static void main(String args[]){
Singleton s1 = null ; // 聲明對象
Singleton s2 = null ; // 聲明對象
Singleton s3 = null ; // 聲明對象
s1 = Singleton.getInstance() ; // 取得執行個體化對象
s2 = Singleton.getInstance() ; // 取得執行個體化對象
s3 = Singleton.getInstance() ; // 取得執行個體化對象
s1.print() ; // 調用方法
s2.print() ; // 調用方法
s3.print() ; // 調用方法
}
};
不管外部聲明了多少個Singleton的對象,但是最終結果都是通過getInstance()方法取得的執行個體對象,也就是說,此時s1、s2、s3實際上都使用了一個對象的引用:instance

那麼這樣的設計在設計模式上來講就屬于單态(單例)設計模式。如果在開發中不希望一個類産生過多的對象的話,則必須使用單态設計模式。
所謂的單态就是在入口處(構造方法)限制了對象的執行個體化操作。