【Java基础】单例模式
1.单例模式
设计模式:大量的实践总结和理论化之后最优的代码结构、编程风格、解决问题的思考方式。类似于棋谱、套路。
单例模式:在整个程序中,对某个类只能存在一个对象实例。比如windows系统中任务管理器窗口只能打开一个。
(1)对象通过构造器来创建,防止别的类使用new来创建该类对象,因此将构造器设为private。
private Singleton() { }
(2)提供一个静态对象,防止其他人修改该对象为null等,权限为private。
private static SingleTon singleTon = new SingleTon();
(3)提供一个公共方法来访问该对象,让其他类只能通过类名.静态方法
调用(不是静态的只能通过对象调用,而此时没有对象)。
public static SingleTon getInstance(){ return singleTon; }
2.饿汉式
singleTon对象使用static修饰,类加载时直接new SingleTon()
创建。
好处:线程安全。
坏处:对象加载时间过长。
public class Singleton { private Singleton() { } private static Singleton singleton = new Singleton(); public static Singleton getInstance() { return singleton; } }
和使用静态代码块的方式效果是一样的,都是类加载时创建。
private static Singleton singleton = null; static { singleton = new Singleton(); }
3.懒汉式
在调用getInstance()方法时,判断对象是否为空,才决定创建对象。
此方式存在线程不安全问题。
好处:延迟对象的创建。
坏处:此种方式线程不安全。
class Singleton { private Singleton() { } private static Singleton singleton; public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
4.线程安全的懒汉式
双重检查
public class Bank { private Bank(){ } private static Bank instance = null; public static Bank getInstance(){ if (instance==null){ synchronized (Bank.class){ if (instance==null){ instance = new Bank(); } } } return instance; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本