设计模式——单例模式

单例模式(Singleton)

一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对一些类来说,保证只有一个实例是很重要的,比如有的时候,数据库连接或 Socket 连接要受到一定的限制,必须保持同一时间只能有一个连接的存在.

单例模式的类型:

一、饿汉模式

创建一个类,将其构造方法私有化,外界无法创建此类的对象,实例化一个对象,外界可以通过这个类的对象进行访问,当将这个实例化的对象变成私有对象时,此前使用的方法失效,这时可以为外界提供一个获取实例化对象的方法,使用public static进行修饰,外界可以通过这个方法访问这个类中的对象。

public class Singleton1 {
    //构造方法私有化
    private Singleton1(){

    }
    //创建类的唯一实例,使用private static修饰
    private static Singleton1 instance = new Singleton1();

    //提供一个获取实例的方法,使用public static修饰
    public static Singleton1 getInstance(){
        return instance;
    }
}

public class test {
    public static void main(String[] args){
        //饿汉模式
        Singleton1 s1 = Singleton1.getInstance();
        Singleton1 s2 = Singleton1.getInstance();
        if(s1==s2){
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    }
}

二、饿汉模式

创建一个类,将其构造方法私有化,外界无法创建此类的对象,声明类的唯一实例,使用private static修饰,提供一个获取实例的方法getinstance,使用public static修饰.

public class Singleton2 {
    //构造方法私有化
    private Singleton2() {

    }
    //声明类的唯一实例,使用private static修饰
    private static Singleton2 instance;
    //提供一个获取实例的方法,使用public static修饰
    public static Singleton2 getinstance() {

        if (instance == null) {
            instance = new Singleton2();
        }
        return instance;
    }
}

public class test {
    public static void main(String[] args){
        //懒汉模式
        Singleton2 s3 = Singleton2.getinstance();
        Singleton2 s4 = Singleton2.getinstance();
        if(s3==s4){
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    }
}

两种模式的测试结果都是true,那么这两种模式有什么相同点和区别呢?


首先两种方案的构造函数和公用方法都是静态的(static),实例和公用方法又都是私有的(private)。
区别在于以下几点:
1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建类的同时未创建对象,线程是不安全的。
2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,它是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单例模式(Singleton Pattern)是众多设计模式中较为简单的一个,同时它也是面试时经常被提及的问题,如...
    廖少少阅读 3,720评论 0 1
  • 目录 本文的结构如下: 什么是单例模式 为什么要用该模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 总...
    w1992wishes阅读 3,085评论 1 2
  • 单例模式 介绍 为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再...
    666真666阅读 2,890评论 0 6
  • 模式介绍 单例模式是应用最广泛的模式之一。 单例模式是为了确保一个类在整个项目中只有一个实例对象。 单例模式最大的...
    黑色小老虎丶阅读 3,602评论 0 2
  • 概念 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,比较常见的有:懒汉式单例、饿汉式单例。单例模...
    怡红快绿阅读 3,362评论 0 0

友情链接更多精彩内容