城市獵人

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

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

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

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

          設計原則
              在JAVA中實現單件模式需要一個私有的構造器、一個靜態方法和一個靜態變量;
              確定在性能和資源上的限制,然后小心地選擇適當的方案來實現單件,以解決多線程的問題;
              如果不是采用第五版的java 2,雙重檢查鎖實現會失效;
              
          實現
              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}
          主站蜘蛛池模板: 谷城县| 苍山县| 遂宁市| 荣昌县| 札达县| 财经| 昌平区| 辉南县| 清徐县| 德格县| 右玉县| 玉环县| 津市市| 莎车县| 北安市| 德州市| 仙居县| 诸暨市| 修水县| 正镶白旗| 舟山市| 嘉善县| 德惠市| 交口县| 冀州市| 阿尔山市| 汾阳市| 临夏市| 贞丰县| 汉川市| 隆化县| 澄江县| 辽阳市| 吴忠市| 潼南县| 廊坊市| 九台市| 长汀县| 丰原市| 手游| 吉林市|