设计模式-单例模式

###单例模式 ####单例模式特点 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点

  • windows中的任务管理器

  • 操作系统的文件系统,一个操作系统只能有一个文件系统

  • servlet编程中,每个servlet也是单例

  • SpringMVC中,控制对象也是单例

  • Spring中的bean

####单例模式分类 #####饿汉式 特点:减少系统开销

	public class SingletonDemo {
	    //类初始化的时候立即加载(没有延时加载的优势),由于加载类的时候天热的线程安全
	    private static final SingletonDemo singleDemo = new SingletonDemo();
	    //私有化构造器
	    private SingletonDemo() {
	    }
	    //方法没有同步,调用效率高
	    public static SingletonDemo getInstance(){
	        return singleDemo;
	    }
	}

#####懒汉式 ######懒汉式普通实现 特点:真正用的时候加载,资源的利用率高,但是每次调用的时候需要同步,并发下效率低

	public class SingletonDemo1 {
	    //调用的时候加载
	    private static SingletonDemo1 instance = null;
	    //私有化构造器
	    private SingletonDemo1() {
	    }
	    //方法同步,调用效率低
	    public static synchronized SingletonDemo1 getInstance() {
	        if (instance == null) {
	            instance = new SingletonDemo1();
	        }
	        return instance;
	    }
	}

######饿汉式静态内部类实现 特点:

  • 外部没有static属性不会饿汉式那样立即加载对象

  • 真正调用getInstance()时,才会加载静态内部类.类加载时是线程安全的,static final保证内存中实例唯一

  • 兼具并发高效和延时加载的优势

	public class SingletonDemo2 {
	    private static class singletonClass {
	        private static final SingletonDemo2 instance = new SingletonDemo2();
	    }
	    public static SingletonDemo2 getInstance() {
	        return singletonClass.instance;
	    }
	    private SingletonDemo2() {

	    }
	}

转载于:https://my.oschina.net/u/2361475/blog/638262

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值