设计模式-单例模式

浪尽此生 提交于 2020-02-28 19:58:55

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

  • 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() {

	    }
	}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!