设计模式 5.单例模式

单例模式应该是每个开发必须知道的设计模式,也十分简单,指保证整个程序中只有一个实例。

1.私有化构造函数

如果外部可以调用构造函数,那么就无法保证单例

1.1 饱汉模式

私有化构造函数 Private, 内部提前初始化 一个 实例

package singleton;

public class Singleton {
    private static Singleton singleton = new Singleton();//这里初始化,保证只有一个实例
    private Singleton() {//private 外部无法初始化,导致只有Singleton类内部可以调用构造函数
        System.out.println("generate a singleton.");
    }
    public static Singleton getInstance() {//提供给外部可以调用获得实例的接口
        return singleton;
    }
}

1.2 饿汉模式

提前声明,但不初始化,直到需要的时候在初始化,不加同步锁可能会出现冲突,得到多个实例。比如加入两个线程同时调用getInstance(),这个时候singleton都是null,则都会new 实例。

package singleton;

public class HungrySingleton {
    private static HungrySingleton singleton;
    private HungrySingleton() {
        System.out.println("generate a singleton.");
    }
    public static HungrySingleton getInstance() {
        if (singleton == null) {
            singleton = new HungrySingleton();
            return singleton;
        }
        return singleton;
    }
}

发布了170 篇原创文章 · 获赞 69 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq951127336/article/details/84973105