首先要說:
構造方法私有化,類的封裝性不光展現在對屬性的封裝上,實際上方法也可以封裝,當構造方法被私有化(封裝),一個類的構造方法私有化之後,則隻能從其類的内部取得執行個體化對象,那麼此時要考慮的問題就是把内部生成的對象全部拿到外部類。
class Singleton{
private Singleton(){ // 将構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
public class SingletonDemo02{
public static void main(String args[]){
Singleton s1 = null ; // 聲明對象
s1 = new Singleton() ; // 錯誤,無法執行個體化對象,因為在執行個體化時,構造方法被私有
}
};
正常情況下,對象屬性隻能通過Singleton類的執行個體化對象才可以進行調用,如果沒有執行個體化對象的時候可以去的對象,則就需要将對象聲明成static通路類型。因為使用static聲明變量,可以直接使用類名稱通路。
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() ; // 調用方法
}
};
圖1、
這種設計模式,屬于單态設計模式,一個類不會産生過多的對象