设计模式(Design Pattern)
是一套被反复使用、多数人知晓、
经过分类编目的、代码设计经验的总结。
目的:
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
有些东西只能有一个,比如古代的皇帝,现在的一夫一妻制。
在java中有些对象我们只需要一个,比如:
配置文件、工具类、线程池、缓存、日志对象等
如果创造出多个实例,就会导致许多问题,比如占用过多的资源,不一致的结果。
常用的单例模式:
饿汉模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package cn.zju.singleton; /** * 饿汉:在类加载的时候就实例化,需要早些吃饱。 * * @author zhushiqing * */ public class Singleton { private Singleton(){ } private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }
|
懒汉模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package cn.zju.singleton; /** * 懒汉模式 线程不安全 * @author zhushiqing * */ public class Singleton2 { private Singleton2(){} private static Singleton2 instance; public static synchronized Singleton2 getInstance(){ if(instance == null) instance = new Singleton2(); return instance; } }
|
两者区别:
饿汉模式:加载类的加载比较慢,但是运行时获取对象速度比较快,在类加载的时候就被创建 线程安全的
懒汉模式:加载类的时候比较快,但是运行时获取对象比较慢。 线程不安全的