/* * 怎麼可以保證這個類只能產生一個對象? * * 思路: * 1.問題是其他程序都可以通過NEW創建該類的對象。無法控制數量 * 所以,不讓其他程序new就ok了 * 2.那第一步的問題也產生了,那其他程序不就沒有對象了嗎? * 乾脆,在奔雷中自己new一個本類對象,這樣的好處是,不讓別的程序new,自己new,可以試想數量控制 * 3.對外提供讓其他程序獲取該對象的方式,就ok * * */ /* * 步驟: * 1.不讓其他程序new該類對象怎麼處理? * 可以將類中的構造函數私有化。 * 2.在本類中new一個對象。 * 3.定義一個方法返回該對象 * */ class Single{//餓漢方式 //創建一個本類對象 private static Single s =new Single(); //構造函數私有化 private Single(){} //定義一個方法返回對象,讓其他程序調用。之所以定義訪問,就是爲了可控 public static Single getInstance(){ return s; } } /* * //延遲加載模式 * class Single{//懶漢方式 * * private static Single s =null; * private Single(){} * public static Single getInstance(){ * if(s==null){ * s=new Single(); * }else{ * return s; * } * } * } * * */ class SingleDemo { /** * @param args */ public static void main(String[] args) { // Single s1= Single.s; // Single s2= Single.s; // Single s1= Single.getInstance(); // Single s2= Single.getInstance(); // // System.out.println(s1==s2); SuperMan man =SuperMan.getInstance(); man.getName(); System.out.println(man.getName()); // SuperMan man1 =SuperMan.getInstance(); // man1.setName("bb"); // man1.getName(); } } //單例模式應用 class SuperMan{ private String name; //創建一個本類對象 private static SuperMan man= new SuperMan("fuck"); //構造函數私有化 private SuperMan(String name){ this.name=name; } //定義一個方法返回對象,讓其他程序調用 public static SuperMan getInstance(){ return man; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
單例模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.