城市獵人

          在一網(wǎng)情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
          posts - 1, comments - 7, trackbacks - 0, articles - 89

          模式(五):單件(singleton)模式

          Posted on 2008-07-23 09:51 sailor 閱讀(183) 評論(0)  編輯  收藏 所屬分類: 模式

          定義
              確保一個類只有一個實例,并提供全局訪問點

          設計原則
              在JAVA中實現(xiàn)單件模式需要一個私有的構造器、一個靜態(tài)方法和一個靜態(tài)變量;
              確定在性能和資源上的限制,然后小心地選擇適當?shù)姆桨竵韺崿F(xiàn)單件,以解決多線程的問題;
              如果不是采用第五版的java 2,雙重檢查鎖實現(xiàn)會失效;
              
          實現(xiàn)
              1、lazy singleton

           1public class Singleton{
           2
           3 private static Singleton uniqueInstance;
           4
           5 private Singleton(){}  //私有構造器
           6
           7 public static Singleton getInstance(){
           8
           9  if(uniqueInstance == null){
          10   
          11   uniqueInstance = new Singleton();
          12  }

          13  
          14  return uniqueSingleton
          15 }

          16}

              
              2、處理多線程
                       這是保證可行的最直接做法,對于性能如果沒有考慮,可以直接用這個方法。

           1public class Singleton{
           2
           3 private static Singleton uniqueInstance;
           4
           5 private Singleton(){}  //私有構造器
           6
           7 public static synchronized Singleton getInstance(){
           8
           9  if(uniqueInstance == null){
          10   
          11   uniqueInstance = new Singleton();
          12  }

          13  
          14  return uniqueSingleton
          15 }

          16}

              3、急切實例化
           1public class Singleton{
           2 
           3 private static uniqueInstance = new Singleton();
           4
           5 private Singleton(){}
           6
           7 public static Singleton getInstance(){
           8 
           9   return uniqueInstance;
          10 }

          11
          12}


              4、用“雙重檢查加鎖”,在getInstance( )中減少使用同步
              由于沒有性能上考慮,所以這個方法似乎殺雞用了牛刀。另外這個方法還得確定使用的是java5以上的版本。

           1package com.sailor.singleton;
           2
           3/**
           4 * @author sailor
           5 * Jul 23, 2008 9:46:17 AM
           6 */

           7public class Singleton {
           8    
           9    private volatile static Singleton uniqueInstance;
          10    
          11    private Singleton(){}
          12    
          13    public static Singleton getInstance(){
          14        if(uniqueInstance == null){
          15            synchronized(Singleton.class){
          16                if(uniqueInstance == null){
          17                    uniqueInstance = new Singleton();
          18                }

          19            }

          20        }

          21        return uniqueInstance;
          22    }

          23}
          主站蜘蛛池模板: 澎湖县| 正定县| 威宁| 武宁县| 登封市| 平湖市| 沁源县| 三亚市| 辉南县| 缙云县| 邵阳市| 孟津县| 宁都县| 大丰市| 光山县| 宿迁市| 阿拉善右旗| 含山县| 太湖县| 平顺县| 车致| 墨竹工卡县| 广东省| 江源县| 琼海市| 镇赉县| 耒阳市| 颍上县| 苍溪县| 和林格尔县| 双流县| 教育| 镇江市| 大渡口区| 虎林市| 章丘市| 五峰| 库尔勒市| 隆德县| 家居| 吉木乃县|