设计模式-单例模式

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

  • windows中的任务管理器windows

  • 操做系统的文件系统,一个操做系统只能有一个文件系统安全

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

  • SpringMVC中,控制对象也是单例操作系统

  • Spring中的bean线程

####单例模式分类 #####饿汉式 特色:减小系统开销code

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

	    }
	}
相关文章
相关标签/搜索