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