单例模式
一、单例模式简介
什么是设计模式?
设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验总结。
目的:使用设计模式是为了重用代码,让代码更容易的被人理解,保证代码的可靠性》
什么是单例模式:有且仅有一个实例。
有些对象我们只需要一个,比如:配置类、工具类、线程池、缓存、日志对象等,如果创造出多个实例就会出现问题,比如:占用过多的资源,不一致的结果。
二、单例模式的实现
单例模式分为:懒汉式和饿汉式
1、懒汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Singleton {
//1、私有化构造方法,隐藏该构造器,不被外部调用 private Singleton(){
}
//2、缓存已经创建的实例 private static Singleton singleton = new Singleton();
//3、向外提供一个可以访问的方法以获取实例,该类可以加入自定义的控制,保证只产生一个Singleton对象 public static Singleton getInstance(){ return singleton; } }
|
(1)、只允许创建一个类,应该为了避免程序自由创建该类,使用private修饰构造方法,从而将该构造方法隐藏起来。
(2)、类的构造方法被隐藏则需要提供一个public方法访问点,用于创建该类的对象,且该方法必须是static的,因为在调用该方法之前还不存在对象。
(3)、该类还必须缓存已经创建好的类。
之所以叫饿汉式,因为其在类加载时就 创建,有点猴急,较为饥渴。
2、懒汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Singletonl { //1、私有化构造方法 private Singletonl() {
} //2、定义一个私有静态变量,缓存已经创建的实例 private static Singletonl singleton;
//3、向外提供一个可以访问的方法以获取实例,该类可以加入自定义的控制,保证只产生一个Singleton对象 public static Singletonl getInstance() { if (singleton==null){ singleton = new Singletonl(); } return singleton; } }
|
之所叫懒汉式,实例在调用时才创建。
三、饿汉式与懒汉式比较
1、饿汉式在类的加载时较慢,但是在运行时获取对象的速度较快,更为重要的是他是线程安全的;
2、懒汉式在类的加载时较快,但是在运行时获取对象的速度较慢,且是线程不安全的。
—结束