【Java基础】单例模式

1.单例模式

设计模式:大量的实践总结和理论化之后最优的代码结构、编程风格、解决问题的思考方式。类似于棋谱套路
单例模式:在整个程序中,对某个类只能存在一个对象实例。比如windows系统中任务管理器窗口只能打开一个。
(1)对象通过构造器来创建,防止别的类使用new来创建该类对象,因此将构造器设为private。

private Singleton() {

}

(2)提供一个静态对象,防止其他人修改该对象为null等,权限为private。

private static SingleTon singleTon = new SingleTon();

(3)提供一个公共方法来访问该对象,让其他类只能通过类名.静态方法调用(不是静态的只能通过对象调用,而此时没有对象)。

public static SingleTon getInstance(){
    return singleTon;
}

2.饿汉式

singleTon对象使用static修饰,类加载时直接new SingleTon()创建。
好处:线程安全。
坏处:对象加载时间过长。

public class Singleton {
    private Singleton() {

    }

    private static Singleton singleton = new Singleton();

    public static Singleton getInstance() {
        return singleton;
    }
}

和使用静态代码块的方式效果是一样的,都是类加载时创建。

    private static Singleton singleton = null;
    
    static {
        singleton = new Singleton();
    }

3.懒汉式

在调用getInstance()方法时,判断对象是否为空,才决定创建对象。
此方式存在线程不安全问题
好处:延迟对象的创建。
坏处:此种方式线程不安全。

class Singleton {
    private Singleton() {
    }

    private static Singleton singleton;

    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

4.线程安全的懒汉式

双重检查

public class Bank {
    private Bank(){ }

    private static Bank instance = null;

    public static Bank getInstance(){
        if (instance==null){
            synchronized (Bank.class){
                if (instance==null){
                    instance = new Bank();
                }
            }
        }
        return instance;
    }
}
posted @ 2022-09-20 11:12  植树chen  阅读(20)  评论(0编辑  收藏  举报