设计模式——单例模式

作者: 你期待的花开 | 来源:发表于2017-01-16 02:41 被阅读50次

单例模式(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、从实现方式来讲他们最大的区别就是懒汉式是延时加载,它是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例。

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

本文标题:设计模式——单例模式

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