Java學習筆記 - 單例設計模式 (一)

1、什麼是單例模式

單例模式解決一個類在內存中只存在一個對象的問題。


2、單例模式適合場景

    單例模式適合於一個類只有一個實例的情況,比如窗口管理器,打印緩衝池和文件系統,它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統 的不同對象訪問,因此需要一個全局的訪問指針,這便是衆所周知的單例模式的應用。當然這只有在你確信你不再需要任何多於一個的實例的情況下。 

 

3、單例模式特點: 

①確保一個類只有一個實例被建立 提供了一個對對象的全局訪問指針 
②在不影響單例類的客戶端的情況下允許將來有多個實例 。

 

4、餓漢式

特點:

先初始化對象

實現方法:

①避免其他程序過多地建立該類對象

②爲讓其他程序能夠訪問到該類對象,在奔類中自定義一個對象

③爲方便其他程序對自定義對象的訪問,提供對外的訪問方式。

class SingleTest 
{
	public static void main(String[] args) 
	{
		Student s1 = Student.getInstance();
		s1.setAge(18);
		Student s2 = Student.getInstance();
		System.out.println(s1.getAge()+","+s2.getAge());//18,18
	}
}

class Student
{	
	private int age;
	//①將構造方法私有化
	private Student(){}
	//②在類中創建一個本類對象
	private static Student s = new Student();
	//③提供一個方法可以獲取到該對象
	public static Student getInstance(){
		return s;
	}
	
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return age;
	}
	
}


5、懶漢式

特點:

對象被方法調用時才初始化,即對象的延時加載。開發當中常用餓漢式,但面試常問的是懶漢式。

實現方法:

class Person
{
	private Person(){}
	private static Person p = null;
	public static Person getInstance(){
		if(p == null)
		{
			synchronized(Person.class){
				if(p == null)				
					p = new Person();
				
			}
		}
		return p;
	}
}


 

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