设计模式java——单例模式

本文详细介绍了单例模式的六种实现方式,包括懒汉式(线程不安全、线程安全)、双重检查锁、饿汉式、静态内部类及枚举类等,每种方式都提供了具体的代码示例。

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

单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式Demo:

/**
 * 2018年4月4日下午8:53:13
 */
package com.Designpattern;

/**
 * @author xinwenfeng
 *
 */
public class TestSingleton {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("===========1============");
		MySingleton1 singleton1 = MySingleton1.getSingleton();
		System.out.println(singleton1);
		MySingleton1 _singleton1 = MySingleton1.getSingleton();
		System.out.println(_singleton1);
		System.out.println("===========2============");
		MySingleton2 singleton2 = MySingleton2.getSingleton();
		System.out.println(singleton2);
		MySingleton2 _singleton2 = MySingleton2.getSingleton();
		System.out.println(_singleton2);
		System.out.println("===========3============");
		MySingleton3 singleton3 = MySingleton3.getSingleton();
		System.out.println(singleton3);
		MySingleton3 _singleton3 = MySingleton3.getSingleton();
		System.out.println(_singleton3);
		System.out.println("===========4============");
		MySingleton4 singleton4 = MySingleton4.getSingleton();
		System.out.println(singleton4);
		MySingleton4 _singleton4 = MySingleton4.getSingleton();
		System.out.println(_singleton4);
		System.out.println("===========5============");
		MySingleton5 singleton5 = MySingleton5.getSingleton();
		System.out.println(singleton5);
		MySingleton5 _singleton5 = MySingleton5.getSingleton();
		System.out.println(_singleton5);
		System.out.println("===========6============");
		MySingleton6 singleton6 = MySingleton6.SINGLETON;
		singleton6.show();
	}

}
//懒汉式,线程不安全
class MySingleton1{
	private MySingleton1() {System.out.println("构造一个1");};//私有构造方法
	private static MySingleton1 singleton;
	public static MySingleton1 getSingleton() {
		if(null == singleton) {
			singleton = new MySingleton1();
		}
		return singleton;
	}
}
//懒汉式,线程安全
class MySingleton2{
	private MySingleton2() {System.out.println("构造一个2");};//私有构造方法
	private static MySingleton2 singleton;
	public synchronized static MySingleton2 getSingleton() {//每次都锁,效率低
		if(null == singleton) {
			singleton = new MySingleton2();
		}
		return singleton;
	}
}
//双重检查锁,线程安全
class MySingleton3{
	private MySingleton3() {System.out.println("构造一个3");};//私有构造方法
	private static MySingleton3 singleton;
	public static MySingleton3 getSingleton() {
		if(null == singleton) {
			synchronized (MySingleton3.class) {//只有为null的时候才锁,效率提高
				if(null == singleton) {
					singleton = new MySingleton3();
				}
			}
		}
		return singleton;
	}
}
//饿汉式,线程安全
class MySingleton4{
	private MySingleton4() {System.out.println("构造一个4");};//私有构造方法
	private static MySingleton4 singleton = new MySingleton4();//加载类时就创建
	public synchronized static MySingleton4 getSingleton() {
		return singleton;
	}
}
//静态内部类
class MySingleton5{
	private MySingleton5() {System.out.println("构造一个5");};//私有构造方法
	private static class SingletonInner{
		private static MySingleton5 singleton = new MySingleton5();
	}
	public synchronized static MySingleton5 getSingleton() {
		return SingletonInner.singleton;//调用时才创建,懒加载
	}
}
//枚举类(最优)
enum MySingleton6{
	SINGLETON;
	public void show() {
		System.out.println("枚举最好用的单例模式");
	};
}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值