码迷,mamicode.com
首页 > 编程语言 > 详细

Java 设计模式 ------ 单例模式

时间:2017-12-03 13:55:40      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:main   单例对象   ips   调用   技术分享   string   技术   实例   方法   

  在程序开发中,有时我们只需要一个对象就可以了,如日志对象,工具类,怎么样保证整个应用程序中有且只有一个对象呢?这就要用到单例模式了,通过名字就可以看出来,它就是保证整个应用程序中只有一个实例的。单例,单例,就是单个实例。现在我们就看一下怎么用Java代码实现单例模式。

  首先用Eclipse 创建一个Java项目,然后在src目录下新建一个Singleton类,这个类就是用于创建单个对象,再新建一个Test类用于测试,最好还是指定一个包名

技术分享图片

  我们都知道创建对象上时候,要调用类的构造函数,但是每调用一次,都会创建一个新的对象,这和我们的创建单个对象不符。那要怎么办呢?首先不能让外界调用类的构造函数,就是让构造函数函私有化

// 构造函数私有化
private Singleton() {
        
}

  构造函数私有化之后,我们不能在外面创建对象了,但又引来了另外一个问题,我们需要的那一个对象也无法创建了,这就要对外提供一个方法来创建对象。我们在本类中创建一个对象,然后提供一个方法暴露出去,因为我们在本类是可以调用构造函数的。

    // 对象的唯一实例
    private static Singleton instance = new Singleton();
    
    // 提供一个用于获取实例的方法
    public static Singleton getInstance() {
        return instance;
    }    

  这时我们就可以在外面通过类名获取了,在Test类中测试一下

public class Test {

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        
        System.out.println(s1 == s2);  // true
    }

}

  创建的两个对象s1, s2相等,证明,它们是同一个对象。以上单例模式的创建方式称之为‘饿汉式‘,因为当类一加载的时候,这个唯一的对象就创建了。 

  现在我们再来考虑创建单例对象的另外一种模式, 称之为‘懒汉式’, 就是我们在声明私有属性的时候,不去创建对象,只有在调用实例的时候才会去创建单例对象;

public class Singleton {
    
    // 构造函数私有化
    private Singleton() {
        
    }
    
    // 只声明了一个对象,而没有进行赋值
    private static Singleton instance;
    
    // 提供一个用于获取实例的方法
    public static Singleton getInstance() {
        if(instance == null) {  // 当第一次调用的时候,创建单例对象
            instance = new Singleton();
        }
        return instance;
    }
}

   

Java 设计模式 ------ 单例模式

标签:main   单例对象   ips   调用   技术分享   string   技术   实例   方法   

原文地址:http://www.cnblogs.com/SamWeb/p/7965869.html

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