設計模式__單例模式

單例設計模式

/*

單例設計模式:一個類在內存只存在一個對象。

建立方式:兩種

第一種:餓漢式 :一開始就創建對象。開發一般用這種方法。安全

第二種:懶漢式 :調用該類時才初始化,這種方法在多線程中不安全。要注意處理 (注意:可以實現延遲加載) 

 

創建方法:

1,將構造函數私有化。

2,在類中創建一個本類對象。

3,提供一個方法可以獲取到該對象。

*/

 

餓漢式實例:

class Single
{
	private int age=1;
	private Single(){}   //1,私有化,這樣做後。。就不能使用new Single創建對象
	static Single s=new Single();   //2,創建對象
	public static Single getInstance(){   //3,獲取方法。注意方法名前加了個Single 類名
		return s;
	}

  public void setage(int age){
		this.age=age;
	}
	public int getage(){
		return age;
	}
}

 

懶漢式實例 (注意:可以實現延遲加載)

class Single
{
	private Single(){} 
	static Single s=null;  
	public static synchronixed Single getInstance(){  //synchronixed 只能一個進入這斷代碼,這樣做程序效率就底了。
		if(s==null)        //多個線程同時調用就可能出問題,
			s=new Single();
		return s;
	}

  // 還有一種解決方法:(在有多線程時,這個比較好。)
	public static Single getInstance(){
		if(s==null){
			synchronixed(Single.class){   //這樣就可以了,但這樣代碼太長。一般不用。可以作爲解決方法。
				if(s==null)
					s=new Single();
			} 
		}
		return s;
  }
}

測試類:

class  SingleDemo
{
	public static void main(String[] args) 
	{
		Single s1=Single.getInstance();
		Single s2=Single.getInstance();
		s1.setage(20);
		System.out.println("只有一個類的情況下:");
		System.out.println("s1="+s1.getage());
		System.out.println("s2="+s2.getage()); //這樣在內存中只會有一個類的建立,s1,s2之間有關聯。
  //相當於共享變量一樣。
		System.out.println("可以new 多個類情況下:");
		Single s3=new Single();
		s3.setage(30);
		System.out.println(s3.getage());
		Single s4=new Single();
		System.out.println(s4.getage());//這樣創建對象,對象之間沒有關聯S4輸出的就是Single類的裏的初始值

	}
}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章