美文网首页
浅谈设计模式一之单例模式

浅谈设计模式一之单例模式

作者: 空城EN | 来源:发表于2017-07-23 09:00 被阅读0次

通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 [DP]

1. 概念

一个实现Singleton类一般拥有以下两个方法,构造函数Singleton(),以及获取实例的方法GetInstance()。如下图所示:

单例结构图.png
需要注意的是,构造方法Singleton()要私有化(用private修饰),获取实例的方法GetInstance()要设置为静态(static)。

2. 实现方法

  • 懒汉式
//懒汉式单例类.在第一次调用的时候实例化自己   
public class Singleton {  
    private Singleton() {}  
    private static Singleton single=null;  
    //静态工厂方法   
    public static Singleton getInstance() {  
         if (single == null) {    
             single = new Singleton();  
         }    
        return single;  
    }  
}  
  • 恶汉式
//饿汉式单例类.在类初始化时,已经自行实例化   
public class Singleton1 {  
    private Singleton1() {}  
    private static final Singleton1 single = new Singleton1();  
    //静态工厂方法   
    public static Singleton1 getInstance() {  
        return single;  
    }  
} 

3. 多线程时的单例模式

在多线程时,一般采用双重锁定的方式来实现单例模式

public static Singleton getInstance() {  
        if (singleton == null) {    
            synchronized (Singleton.class) {    
               if (singleton == null) {    
                  singleton = new Singleton();   
               }    
            }    
        }    
        return singleton;   
    }

相关文章

网友评论

      本文标题:浅谈设计模式一之单例模式

      本文链接:https://www.haomeiwen.com/subject/srvpkxtx.html