餓漢式
package org.westos.常用的設計模式.單例模式之餓漢;
/**
* 單例設計模式概述:
單例模式就是要確保類在內存中只有一個對象,該實例必須自動創建,並且對外提供。
優點
在系統內存中只存在一個對象,因此可以節約系統資源,對於一些需要頻繁創建和銷燬的對象單例模式無疑可以提高系統的性能。
缺點
沒有抽象層,因此擴展很難。職責過重,在一定程序上違背了單一職責
* 餓漢式:在該類加載的時候對象就被創建
* */
public class Demo {
public static void main(String[] args) {
Student a = Student.getStudent();
Student b = Student.getStudent();
System.out.println(a==b);
}
}
package org.westos.常用的設計模式.單例模式之餓漢;
public class Student {
//私有化構造方法
private Student() {}
//創建一個對象在類的成員位置,私有化使其不能被修改,static使其在類加載的時創建
private static Student s = new Student();
//創建一個方法使其他類可以使用該對象,採用靜態方法,因爲構造方法被私有化
public static Student getStudent() {
return s;
}
}
懶漢式
package org.westos.常用的設計模式.單例模式之懶漢;
/**
* 懶漢式:
* 符合單例模式核心思想
* 1)自定義一個類,將無參構造私有化
* 2)在成員位置聲明變量
* 3)提供公共靜態功能,在裏面判斷的創建該類對象,返回該類對象
*
* 如果是開發中,那麼就使用餓漢式(餓漢式它不會出現問題的單例模式)
* 如果是面試中,那麼使用懶漢式(因爲他是可能出現問題的一種單例模式)
*
* 面試題:
* 你使用過單例模式嗎?簡單介紹一種單例模式,請用代碼設計
* 面試官想問的是:使用設計單例的懶漢式,能否想到使用同步機制解決線程的安全問題..
*
* 懶漢式(延遲加載 -->懶加載)
* 可能會出現問題
* ---> 多線程的問題
* --->校驗多線程安全問題的標準
* 1)是否是多線程環境
* 2)是否有共享數據
* 3)是否有多條語句對共享數據進行操作 (使用同步機制進行操作)
*
* */
public class Demo {
public static void main(String[] args) {
Teacher a = Teacher.getTeacher();
Teacher b = Teacher.getTeacher();
System.out.println(a==b);
}
}
package org.westos.常用的設計模式.單例模式之懶漢;
public class Teacher {
private Teacher() {}
private static Teacher t = null;
//提供公共的靜態功能
/*public static Teacher getTeacher() {
//如何創建該類對象,需要用的時候在創建
//t1,t2,t3
//在這裏需要判斷
synchronized (t) {
if(t==null) {
t = new Teacher() ;
}
return t ;
}
}*/
//靜態的同步方法 (鎖對象: 類名.class)
public synchronized static Teacher getTeacher() {
if(t==null) {
t = new Teacher() ;
}
return t ;
}
}