Java什麼是單例設計模式,單例設計模式舉例,單例設置模式和普通的區別

Java什麼是單例設計模式,單例設計模式舉例,單例設置模式和普通的區別

保證一個類僅有一個實例,提供一個訪問它的全局訪點。
適用性

1.當類只能有一例而且客戶可以從一個衆所周知的訪問點訪問它時。

2.當這個唯一實例應該是通過子類化可擴展的,並且客戶應該無需更改代碼就能使用一個擴展的實例時。

參與者

Singleton
  定義一個Instance操作,允許客戶訪問它的唯一實例。Instance是一個類操作。
  可能負*創建它自己的唯一實例。

單利設計模式舉例子:

//定義一個只能初始化一次的類
public class Stu {
	private  Stu() {//私有化類的無參構造器,外部無法使用new該類
	}
	//在內部實例化該對象
	private static Stu stu = new Stu();//外部類在使用該類時直接類名點方法即可加載該類的對象嗎,靜態區域只能加載一次
	public static Stu getInstance() {//通過調用該方法來返回該類的對象
		return stu;
	}
	private int i = 0;
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "stu:"+i++;
	}
}

定義一個普通類

public class Teacher {
	private int i = 0;
	@Override
	public String toString() { // TODO Auto-generated method stub
		return "Teacher" + i;
	}

}

分別實例化這兩個類

public class StuTest {
	public static void main(String[] args) {
		Stu stu1 = Stu.getInstance();
		Stu stu2 = Stu.getInstance();
		Stu stu3 = Stu.getInstance();
		Stu stu4 = Stu.getInstance();
		//因爲當打印子類對象的時候會自動調用父類的toString方法,由於子類重寫了父類的方法所以打印的時候調用的是子類的toString方法
		System.out.println(stu1);
		System.out.println(stu2);
		System.out.println(stu3);
		System.out.println(stu4);
		Teacher tea = new Teacher();
		Teacher tea1 = new Teacher();
		Teacher tea2 = new Teacher();
		Teacher tea3 = new Teacher();
		System.out.println(tea);
		System.out.println(tea1);
		System.out.println(tea2);
		System.out.println(tea3);
	}
}

輸出結果:
stu:0
stu:1
stu:2
stu:3
Teacher0
Teacher0
Teacher0
Teacher0

證明:stu每次調用的是同一個對象,只在內存當中初始化一次,而Teacher每new都會在內存當中重新創建對象

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