日誌 > 個人日記
單例模式(singleton)
package singleton; public class SingletonA { //私有屬性 private static int id = 1; //SingletonA的唯一實例 private static SingletonA instance = new SingletonA(); //將構造函數私有,防止外界構造SingletonA實例 private SingletonA() { } /** * 獲取SingletonA的實例 */ public static SingletonA getInstance() { return instance; } /** * 獲取實例的id,synchronized關鍵字表示該方法是線程同步的, * 即任一時刻最多只能有一個線程進入該方法 * @return */ public synchronized int getId() { return id; } /** * 將實例的id加1 */ public synchronized void nextID() { id++; } } package singleton; public class SingletonB { //私有屬性 private static int id = 1; //SingletonB的唯一實例 private static SingletonB instance = null; //將構造函數私有,防止外界構造SingletonB實例 private SingletonB() { } //獲取SingletonB的唯一實例,同樣用synchronized關鍵字保證某一時刻只有一個線程調用此方法。 public static synchronized SingletonB getInstance() { //如果instance爲空,便創建一個新的SingletonB實例,否則,返回已有的實例 if (instance == null) { instance = new SingletonB(); } return instance; } public synchronized int getId() { return id; } public synchronized void nextID() { id++; } } package singleton; /* * 模式名稱:單建模式 * 模式特徵:只能創建該類的一個實例 * 模式用途:提供一個全局共享類實例 **/ public class SingletonTest { public static void main(String[] args) { // SingletonA singletonA =new SingletonA(); // SingletonA singleton2 =new SingletonA(); SingletonA a1 = SingletonA.getInstance(); SingletonA a2 = SingletonA.getInstance(); System.out.println("用SingletonA實現單例模式"); System.out.println("調用nextID方法前:"); System.out.println("a1.id=" + a1.getId()); System.out.println("a2.id=" + a2.getId()); a2.nextID(); a1.nextID(); System.out.println("調用nextID方法後:"); System.out.println("a1.id=" + a1.getId()); System.out.println("a2.id=" + a2.getId()); // SingletonA和SingletonB的區別:前者是在類被加載的時候就創建了實例, // 而後者是在調用getInstance方法時才創建實例。 // SingletonB b1 = SingletonB.getInstance(); // SingletonB b2 = SingletonB.getInstance(); // System.out.println("用SingletonB實現單例模式"); // System.out.println("調用nextID方法前:"); // System.out.println("b1.id=" + b1.getId()); // System.out.println("b2.id=" + b2.getId()); // b1.nextID(); // System.out.println("調用nextID方法後:"); // System.out.println("b1.id=" + b1.getId()); // System.out.println("b2.id=" + b2.getId()); } } |
評論列表
溫馨提示:點擊驗證碼輸入框,以獲取驗證碼
請輸入驗證碼:
loading......