设计模式——单例模式

一、单例模式:

1.在单例类的内部实现只生成一个实例,同时让它提供一个静态的getInstance()唯一实例工厂方法供用户访问;

2.为了防止在外部对其实例化,将其构造函数设计为私有(通过new 实例化的时候报错);

3.在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例(外部只能通过此方法来实例化)。

二、单例模式——醉汉式

/**
 * 作者:雪灵钰
 * 时间:2021/9/8 19:22
 * 描述:单例模式-醉汉式
 */
public class Singleton {

    //1.私有的静态变量
    private static Singleton singleton= new Singleton();

    //2.私有的构造器
    private Singleton() {}

    //3.公共的静态实例化方法
    public static Singleton getInstance(){
        return singleton;
    }
}

三、单例模式——懒汉式

/**
 * 作者:雪灵钰
 * 时间:2021/9/8 19:42
 * 描述:单例模式-懒汉式
 */
public class Singleton2 {
    //1.私有的静态变量
    private static Singleton2 singleton= null;

    //2.私有的构造器
    private Singleton2() {}

    //3.公共的静态实例化方法
    public static Singleton2 getInstance(){
        if (singleton == null) {
            singleton=new Singleton2();
        }
        return singleton;
    }
}

三、测试结果

/**
 * 作者:雪灵钰
 * 时间:2021/9/8 19:26
 * 描述:创建单例测试结果
 */
public class SingletonTest {
    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();

        System.out.println("醉汉式:"+(instance==instance2));

        Singleton2 instance3 = Singleton2.getInstance();
        Singleton2 instance4 = Singleton2.getInstance();

        System.out.println("懒汉式:"+(instance3==instance4));

        //RedisTest为自己随便写的类,用于做对比
        RedisTest test = new RedisTest();
        RedisTest test2 = new RedisTest();
        System.out.println("对比与普通类:"+(test==test2));
    }
}

 

posted @ 2021-09-08 20:14  蒂雪凌星  阅读(34)  评论(0编辑  收藏  举报
Live2D