【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;
}
}
posted @   植树chen  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示