5种单例模式


package com.zhu.test.singleton_1;

/**
 * 懒汉单例模式
 * @date 2017年6月20日
 * @author zhuhongxin
 */
public class Singleton_1 {

	private static Singleton_1 uniqueSingleton;
	
	private Singleton_1 () {}
	
	public static Singleton_1 getInstance() {
		if (null == uniqueSingleton) {
			uniqueSingleton = new Singleton_1();
		}
		return uniqueSingleton;
	}

}
package com.zhu.test.singleton_2;

/**
 * 同步单例模式
 * @date 2017年6月20日
 * @author zhuhongxin
 */
public class Singleton_2 {

	private static Singleton_2 uniqueSingleton;
	
	private Singleton_2() {}
	
	public static synchronized Singleton_2 getInstance() {
		if (null == uniqueSingleton) {
			uniqueSingleton = new Singleton_2();
		}
		return uniqueSingleton;
	}
	
}
package com.zhu.test.singleton_4;

/**
 * 饿汉单利模式
 * @date 2017年6月20日
 * @author zhuhongxin
 */
public class Singleton_4 {
	
	private static Singleton_4 uniqueSingleton = new Singleton_4();

	private Singleton_4() {}
	
	public static Singleton_4 getInstance() {
		return uniqueSingleton;
	}
	
}

package com.zhu.test.singleton_5;

public enum Singleton_5 {

	INSTANCE;

	private SingletonBean uniqueSingleton;
	
	private Singleton_5() {
		uniqueSingleton = new SingletonBean ();
	}
	
	public SingletonBean getInstance() {
        return uniqueSingleton;
    }

}

package com.zhu.test.singleton_5;

public class SingletonBean {

}


package com.zhu.test.singleton_3;

/**
 * 双重检查锁单利模式
 * @date 2017年6月20日
 * @author zhuhongxin
 */
public class Singleton_3 {
	
	private volatile static Singleton_3 uniqueSingleton;

	private Singleton_3() {}
	
	public static Singleton_3 getInstance() {
		if (null == uniqueSingleton) {
			synchronized (Singleton_3.class) {
				if (null == uniqueSingleton) {
					uniqueSingleton = new Singleton_3();
				}
			}
		}
		return uniqueSingleton;
	}

}

package com.zhu.test;

import com.zhu.test.singleton_1.Singleton_1;
import com.zhu.test.singleton_2.Singleton_2;
import com.zhu.test.singleton_3.Singleton_3;
import com.zhu.test.singleton_4.Singleton_4;
import com.zhu.test.singleton_5.SingletonBean;
import com.zhu.test.singleton_5.Singleton_5;

/**
 * 测试单例模式
 * @date 2017年6月21日
 * @author zhuhongxin
 */
public class SingletonTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Singleton_1 instance1_1= Singleton_1.getInstance();
		Singleton_1 instance1_2= Singleton_1.getInstance();
		System.out.println(instance1_1 == instance1_2);

		Singleton_2 instance2_1= Singleton_2.getInstance();
		Singleton_2 instance2_2= Singleton_2.getInstance();
		System.out.println(instance2_1 == instance2_2);
		
		Singleton_3 instance3_1= Singleton_3.getInstance();
		Singleton_3 instance3_2= Singleton_3.getInstance();
		System.out.println(instance3_1 == instance3_2);
		
		Singleton_4 instance4_1= Singleton_4.getInstance();
		Singleton_4 instance4_2= Singleton_4.getInstance();
		System.out.println(instance4_1 == instance4_2);
		
		SingletonBean instance5_1= Singleton_5.INSTANCE.getInstance();
		SingletonBean instance5_2= Singleton_5.INSTANCE.getInstance();
		System.out.println(instance5_1 == instance5_2);
		
	}

}


至此5种单例模式结束, 如有不对的地方请指正,毕竟正在前往老司机的路上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值