设计模式之单例模式
单例模式(Singleton): 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点。也就是这些类只能有一个实例;能够自动实例化;对整个系统可见,也就是必须向整个系统提供这个实例。单例模式只应在有真正的“单一实例”的需求时才可使用。
用处:当想要控制实例数目,节省系统资源的时候,可以使用单例模式。
优点:
1、内存里只有一个实例,减少了内存的开销。
2、避免对资源的多重占用
缺点:
没有接口,不能继承,一个类应该只关心内部逻辑。
创建一个 Singleton 类。有它的私有构造函数和本身的一个静态实例。
public class SingleObject {
// 创建 SingleObject 的对象
private static SingleObject instance = new SingleObject();
// private 修饰构造函数,就不能被实例化了
private SingleObject() {
}
public static SingleObject getInstance() {
return instance;
}
public void showMessage() {
System.out.println("Hello World!");
}
}
public class SingletonMode {
public static void main(String[] args) {
// 获取对象
SingleObject obj = SingleObject.getInstance();
obj.showMessage();
}
}
单例模式的几种实现方式:
1、懒汉式,线程不安全
2、懒汉式,线程安全
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
3、饿汉式,线程安全优点:
没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。