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

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

作者: 空城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