设计模式——单例模式

发布于 2019-06-13  100 次阅读


--单例模式--

定义

一个类只有一个实例,且该类能自行创建这个实例

(Windows任务管理器、回收站、文件系统、线程池、数据库连接池等等)

特点

1、单例类只有一个实例对象
2、给单例对象必须由单例类自己创建
3、单例类对外提供访问该单例的全局访问点

实现

1、懒汉式

public class LazySingleton {
    private static volatile LazySingleton instance = null;
    private LazySingleton() {   }
    public static synchronized LazySingleton getInstance( ) {
        if(instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

类加载时没有生成实例,只有第一次调用getInstance方法时才创建实例。

线程不安全,需要使用volatile、synchronized关键字或者同步

2、饿汉式

public class HungrySingleton {
    private static final HungrySingleton instance = new HungrySingleton();
    private HungrySingleton() {}
    public static HungrySingleton getInstance() {
        return instance;
    }
}

类一旦加载就创建一个实例,保证在调用getInstance方法之前单例就存在了。

线程安全

应用场景

1、某个类只要求生成一个对象,比如一个班的班长,每个人的身份证号码等。
2、对象需要被共享的场合,如数据库连接池、Web配置对象等。
3、某个类需要频繁实例化,但是创建的对象又频繁地被销毁,比如多线程的线程池、网络连接池等。


不以物喜,不以己悲。