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都會在內存當中重新創建對象