城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

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

Posted on 2008-07-23 09:51 sailor 阅读(179) 评论(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}

只有注册用户登录后才能发表评论。


网站导航: