定义
单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供
要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。可以理解为保证一个类只能new一个对象,即只有一个实例,并且提供一个访问该实例的全局访问点
实现方式
1、饿汉式单例
构造器私有化、提供一个获取对象的静态方法、类加载时就创建对象
// 饿汉式单例
public class SingletonDemo01 {
// 使用static关键字,类加载时就实例化(立即加载,失去了延时加载的优势),加载类时,天然是线程安全的
private static SingletonDemo01 instance = new SingletonDemo01();
// 私有化构造器,确保类只能在此类中实例化,只能被实例化一次
private SingletonDemo01() {
}
// 提供一个公共的静态方法,让其他类可以获取这个对象,方法没有同步,调用效率高
public static SingletonDemo01 getInstance() {
return instance;
}
}
2、懒汉式单例,和饿汉式进行比较
// 懒汉式单例
public class SingletonDemo02 {
// 类加载时没有实例化对象
private static SingletonDemo02 singletonDemo02;
// 私有化构造器
private SingletonDemo02() {
}
// 可能会有多个线程调用此方法,所以加上了synchronized,避免创建多个对象,相比于饿汉式,调用效率低
public static synchronized SingletonDemo02 getInstance() {
// 只有需要使用这个类的对象时,才回去判断对象是否已经实例化,决定是否实例化对象
if (null == singletonDemo02) {
singletonDemo02 = new SingletonDemo02();
}
return singletonDemo02;
}
}
如有错误,欢迎指正
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136820.html