一、单例设计模式(Singleton Pattern)
1、设计模式是什么
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
2、单例模式是什么
在Java中,单例设计模式是一种创建型设计模式,确保一个类只有一个实例,并提供对该实例的全局访问点。
单例模式一般分为两种:饿汉式和懒汉式。
3、单例模式实现
-
私有构造函数:
将构造函数设置为私有,以防止外部类直接实例化。 -
创建静态私有实例变量:
根据具体的单例模式实现,创建一个静态私有的类实例变量。 -
提供公共静态方法获取实例:
提供一个公共的静态方法,用于返回单例实例。根据不同实现方式,可能需要线程安全的处理。
public class Example {
public static void main(String[] args) {
SingleTon singleInstance = SingleTon.getInstance();
}
}
class SingleTon {
private static SingleTon instance = new SingleTon();
private SingleTon() {
}
public static SingleTon getInstance() {
return instance;
}
}
二、单例模式饿汉式
在类加载时就创建实例,适用于实例初始化开销较小的情况。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
三、单例模式懒汉式
只有在需要时才创建实例,适用于实例初始化开销较大的情况。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
四、饿汉式和懒汉式的区别
- 饿汉式和懒汉式的区别在于创建对象的时机不同;饿汉式在类加载时就创建了对象实例,而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
- 饿汉式存在浪费资源的可能,因为如果这个类被加载了,而这个类的实例并没有被使用,那么饿汉式创建的对象就浪费了;对于懒汉式,就不存在这个问题,因为懒汉式只会在需要时创建这个对象。
五、Runtime 类
java.lang.Runtime
类是一个经典的单例模式的实现实例。
public class Runtime {
private static Runtime currentRuntime = new Runtime();
// 私有构造函数
private Runtime() { }
// 静态方法获取唯一实例
public static Runtime getRuntime() {
return currentRuntime;
}
// 其他方法...
}
显然,对于Runtime类使用的是饿汉式的单例模式。