Java麵向對象基礎--構造方法私有化
1、對構造方法進行封裝
class Singleton{
private Singleton(){ // 將構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
2、使用
被私有化構造方法的Singleton類,不能在外部直接實例化。
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() ; // 錯誤,無法實例化對象
}
};
在內部進行實例化。
class Singleton{
Singleton instance = new Singleton() ; // 在內部產生本類的實例化對象
private Singleton(){ // 將構造方法進行了封裝,私有化
}
public void print(){
System.out.println("Hello World!!!") ;
}
};
public class SingletonDemo03{
public static void main(String args[]){
Singleton s1 = null ; // 聲明對象
}
};
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() ; // 調用方法
}
};
正常情況下,屬性應該封裝。代碼最好修改為下麵的形式: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() ; // 調用方法
}
};
3、程序的意義
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



4、總結
單態設計模式的核心就是將類的構造方法私有化,之後在類的內部產生實例化對象,並通過類的靜態方法返回實例化對象的 應用。
最後更新:2017-04-03 15:22:03