单例模式(逐步递进的三种)

本文深入探讨了Java单例模式的三种实现方式,包括包声明、核心类定义和实例获取方法,并通过实例代码详细说明了每种实现方式的特点和优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package 单例模式A;

public class SingletonPatternA {

@SuppressWarnings({ "static-access", "unused" })
public static void main(String args[]){

Emperor emperor1 = Emperor.getInstance();
emperor1.emperorInfo();

Emperor emperor2 = Emperor.getInstance();
emperor1.emperorInfo();

if(emperor1 == emperor2){ //判断emperor1 和emperor2 是否是同一个人
System.out.println(emperor1+"=="+emperor2+" true.");
}
}
}

class Emperor {

private static Emperor emperor = null;

public Emperor(){}

public static Emperor getInstance(){
if(emperor ==null){
emperor = new Emperor();
}
return emperor;
}

public static void emperorInfo(){
System.out.println("我是皇帝某某···");
}

}

//**************************************************************************

package 单例模式A;

public class SingletonPatternB {

@SuppressWarnings("static-access")
public static void main(String args[]){

new Emperor2().getInstance().emperorInfo();

}
}

class Emperor2 {

private static Emperor2 emperor2=null;

Emperor2(){}

@SuppressWarnings("static-access")
public Emperor2 getInstance(){
if(this.emperor2 == null) //只有这儿和第一种不同
this.emperor2 = new Emperor2();
return this.emperor2;
}

public static void emperorInfo(){
System.out.println("我是皇帝某某···");
}
}


//***********************************************************************
package 单例模式A;

public class SingletonPatternC {

@SuppressWarnings("static-access")
public static void main(String args[]){
Emperor3 emperor3 = Emperor3.getInstance();
emperor3.emperorInfo();

Emperor3 emperor33 = Emperor3.getInstance();
emperor33.emperorInfo();

if(emperor3 == emperor33){
System.out.print("他们是同一个对象!");
}
}
}

class Emperor3 {

private static final Emperor3 emperor3 = new Emperor3(); //变化

private Emperor3(){}

public synchronized static Emperor3 getInstance(){ //防止并发 多线程问题
return emperor3;
}

public static void emperorInfo(){
System.out.println("我是皇帝某某···");
}
}


//当然了,我们是推荐第三种的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值