单例模式:生成只存在一个的实例

饿汉模式

public class Singleton {
/* 在类装载的时候就完成实例化 */
private static Singleton instance = new Singleton();
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 获取单例实例 */
public static Singleton getInstance() {
return instance;
}
}

懒汉模式(双重检查)

优点:线程安全;延迟加载;效率较高。

public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static volatile Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 1:懒汉式,静态工程方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}

静态内部类

与饿汉模式实例机制相似,静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。

优点:避免了线程不安全,延迟加载,效率高。

public class Singleton {
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
private static class SingletonInstance {
private static final Singleton instance = new Singleton();
}
/* 获取单例实例 */
public static Singleton getInstance() {
return SingletonInstance.instance;
}
}
posted @   穆海如枫  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示