码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之单例模式

时间:2015-12-25 22:17:40      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

 单例模式有以下的特点:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

单例模式的写法有好几种,如懒汉式单例、饿汉式单例

一、饿汉式单例

//饿汉式单例类.在类初始化时,已经自行实例化   
public class Singleton1 {  
    private Singleton1() {}  
    private static final Singleton1 single = new Singleton1();  
    //静态工厂方法   
    public static Singleton1 getInstance() {  
        return single;  
    }  
}  

汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的

二、懒汉式单例

  1. 私有化构造函数。
  2. 声明本类引用类型变量,但是不要创建对象。
  3. 声明一个公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类的对象了,如果已经创建了就不要在创建直接返回即可,如果还没有创建,那么就先创建本类的引用类型变量,然后再返回。
public class Single {
    //私有化构造函数
    private Single(){}
    //声明本类引用类型变量,但是不要创建对象
    private static Single s;
    //声明一个公共静态的方法获取本类的对象
    public static Single getInstance(){
            if(s==null){
                s=new Single();
            }
            return s;
    }
}

上面存在线程安全问题:

1、在getInstance方法上加同步

public static Single getInstance(){
            synchronized ("lock") {
                if(s==null){
                    s=new Single();
                }
            }    
            return s;
    }

2、双重检查锁定

 public static Single getInstance(){
        if(s==null){
            synchronized ("lock") {
                if(s==null){
                    s=new Single();
                }
            }    
        }
        return s;
 }

设计模式之单例模式

标签:

原文地址:http://www.cnblogs.com/lyjs/p/5077086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!