大话编程-单例模式
Posted 大话编程那些事儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话编程-单例模式相关的知识,希望对你有一定的参考价值。
单例模式(singleton pattern)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
动机
对一些类来说,只有一个实例是很重要的。怎么保证一个类只有一个实例呢?提供一个全局变量使得一个对象可以被访问,但他不能防止你实例化多个对象,所以只有让类自身负责保存它的唯一实例。
适用场景
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它。
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
结构
示例代码
示例一:懒汉方式
public class Singletonlanhan {
//volatile 确保当instance变量被初始化成Singletonlanhan实例时,多个线程正确的处理instance变量
private volatile static Singletonlanhan instance;
private Singletonlanhan() {}
//双重检查加锁,只有第一次才会彻底执行以下代码块
public static Singletonlanhan getInstance() {
if (instance == null) {
synchronized (Singletonlanhan.class) {
if (instance == null) {
instance = new Singletonlanhan();
}
}
}
return instance;
}
}
示例二:饿汉方式
public class Singletonehan {
private static Singletonehan instance = new Singletonehan();
private Singletonehan() {}
public static Singletonehan getInstance() {
return instance;
}
}
总结
懒汉:在第一次获取时实例化,类加载快,获取对象的速度慢
饿汉:在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
单例模式使得这个唯一实例是类的一般实例,但该类被写成只有一个实例能被创建。做到这一点的一个常用方法是将创建这个实例的操作隐藏在一个类操作(一个静态代码块,或者是一个方法),由它保证一个实例被创建。这个操作可以访问保存唯一实例的变量,而且它可以保证这个变量在返回值之前用这个唯一实例初始化。
以上是关于大话编程-单例模式的主要内容,如果未能解决你的问题,请参考以下文章