剑指officer第二题:题目:设计一个类,我们只能生成该类的一个实例(五种方法实现)

package learn;

public class offer1 {
	/*
	 * 单例模式:懒汉模式、饱汉模式,线程安全,但由于不论使用与否都会创建实例,造成了资源浪费
	 */
	public static class singleton {

		private final static singleton instance = new singleton();

		public static singleton getInstance() {
			return instance;
		}

		private singleton() {
		}

	}
	/*
	 * 单例模式:懒汉模式、饱汉模式,使用内部静态类,【比较推荐】虽然见到的不多,笔者也是参考了其他文章才写出来 静态内部类可以改编为静态代码快
	 */
	public static class singleton2{
		private final static class instanceFactory{
			private final static singleton2 instance = new singleton2();
		}
			
		public static singleton2 getInstance(){
			return instanceFactory.instance;
		}
		
		
		private singleton2(){
		}
		
	}
	

	/*
	 * 单例模式:饥汉模式,相对懒汉模式,资源使用时才会创建,但线程不安全,
	 */
	public static class singleton3 {
		private static singleton3 instance = null;

		private static singleton3 getInstance() {
			if (instance == null) {
				instance = new singleton3();
			}
			return instance;
		}

		private singleton3() {
		}
	}

	/*
	 *   单例模式:饥汉模式,相对懒汉模式,线程安全,但多线程效率不高
	 * */
	public static class singleton4{
		private static singleton4 instance = null;
		
		public synchronized static singleton4 getInstance(){
			if(instance == null){
				instance = new singleton4();
			}
			return instance;
		}
		
		private singleton4(){
		}
	}
	
	/*
	 *   单例模式:饥汉模式,双校验模式,相对懒汉模式,线程安全,效率较高【推荐】相对来说最后一种比较常见,也是对同步的考虑较多
	 * */
	public static class singleton5{
		private static singleton5 instance = null;
		
		public static singleton5 getInstance(){
			if(instance == null){
				synchronized (singleton5.class){
					if(instance ==null){
						instance = new singleton5();
					}
				}
			}
			return instance;
		}
		
		private singleton5(){	
		}
		
	}
	
	public static void main(String[] args) {
		System.out.println(singleton.getInstance()==singleton.getInstance());
		System.out.println(singleton2.getInstance()==singleton2.getInstance());
		System.out.println(singleton3.getInstance()==singleton3.getInstance());
		System.out.println(singleton4.getInstance()==singleton4.getInstance());
		System.out.println(singleton5.getInstance()==singleton5.getInstance());
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值