標籤:
/*
設計模式:解決某一類問題最行之有效方法
java中23中設計模式
單例設計模式:解決一個類在記憶體中只存在一個對象.
想要保證對象唯一.
1.為了避免其它程式過多建立該類對象.先控制禁止
其他程式建立對象.
2.還為了讓其他程式程式可以訪問到該類對象,只好在在
本類中自定一個對象.
3.為了方便其它程式對自訂對象的訪問,可以對外提供
一些訪問方式.
這三步怎麼用代碼體現呢.?
1,將建構函式私人化.不允許建立對象.
2,在類中建立一個本類對象.
3,提供一個方法,可以擷取到該對象.
*/
package jichu51;class Person{String name;private Person(){};//1.私人化構造方法static Person aPerson=new Person();//2.執行個體化本類對象public static Person getInstance (){return aPerson;}}public class Single {public static void main(String[] args) {// TODO Auto-generated method stubPerson A=Person.getInstance();A.name="小明";Person B=Person.getInstance();System.out.println(B.name);}}
假如主函數中調用 Sing a = Single.getInstance, 在記憶體中是怎樣變化的呢(先執行那個,後執行那個,最好能詳細點),還有如果有有一個變數 Sing b = Single.getInstance, 為什麼a,b指向同一個地方,調用兩次的話不是new了兩次嗎- -
答:
因為是靜態變數 static Single s 所以類載入即被建立該變數s指向new Single() ,當調用getInstance時返回s對象。
因為該s對象屬於靜態成員變數存在方法區而不是在堆棧中。方法區儲存的東西只有一份。所以即使String b=Single.getInstance().返回的仍然是方法區中的唯一的靜態變數s。即單例模式只有一個靜態變數s指向該對象。不管怎麼調用都只有一個該對象。
java單例模式