單例模式–singleton pattern :是非常常見的設計模式,過渡使用會造成弊大於利的後果。
爲了節省資源,很多地方我們只需要一個實例即可,這種實例往往沒有狀態,只是功能類。例如連接池。
單例對象一定要注意儘量不要有實例域,構造方法私有
1、角色和類圖
- Singleton:單例模式只有這麼一個角色,用於返回唯一對象。
2、簡單單例模式
2.1、單例類
- 靜態私有初始化一個實例。
- 私有化構造函數,不允許new。
- 通過getInstance 返回實例。
package com.wht.schema.singleton;
/**
* 單例模式
* @author JDIT
*/
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("生成一個實例。");
}
public static Singleton getInstance() {
return singleton;
}
}
2.2、測試類
import com.wht.schema.singleton.Singleton;
import org.junit.Test;
/**
* @author JDIT
*/
public class SchemaTestClient {
@Test
public void singletonTest() {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println("是否爲同一個實例:" + (singleton1 == singleton2));
}
}
3、小結
以前學習單例模式是層層遞進式的,這個一步到位,比較通用的是這個模式。
而真正的開發會涉及併發和對象回收的問題,有時候不必糾結是否必須單例,但是必須確保能拿到實例。