浅说单例模式
1.单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。
2.设计思想:
- 1.构造函数私有化(通过类不能随便去new一个新的对象)。
- 2.创建一个静态公共方法(使得测试类能够调用方法去获得对象)。
- 3.在方法外、类中去创建对象(如果在方法中创建,每调用一次方法,就会重新创建一个对象)。
3.单例模式两种形式:
(1)饿汉式:饿汉式即在类加载的时候完成了初始化操作,所以在类加载时较慢,但是获取对象的速度很快(立即加载)。且不存在线程安全问题。
package com.etime3;
//饿汉式
public class Singleton1 {
//在类加载的时候完成了初始化操作
private static final Singleton1 instance=new Singleton1();
//构造函数私有化
private Singleton1() {
}
//通过一个public方法去获得对象
public static Singleton1 getInstance() {
return instance;
}
}
(2)懒汉式:懒汉式即在类加载时不初始化操作,等到第一次被使用时才在方法中初始化对象,获取对象的速度较慢(延迟加载),且多个线程调用public方法时可能有多个对象。可以通过添加同步锁 — synchronized方法来解决这个问题。
package com.etime3;
//懒汉式
public class Singleton2 {
//在类加载的时候不进行初始化操作
private static Singleton2 instance;
//构造函数私有化
private Singleton2() {
}
//判断instance是否为空,为空,则初始化
public static synchronized Singleton2 getIntance() {
if(instance==null) {
instance =new Singleton2();
}
return instance;
}
}