单例模式是一种常用的软件设计模式。
单例模式:保证一个类只有一个实例且实例易于外界访问;
单例模式的三个要点:
1.某个类只能有一个实例;
2.它必须自行创建这个实例;
3.它必须自行向整个系统提供这个实例。
优点:1.实例控制;2.灵活性。
饿汉式单例模式:
//饿汉式单例模式
public class Person {
//私有化构造函数
private Person(){}
//私有化Person类型属性
private static Person person =new Person();
//提供一个静态方法,外部通过该静态方法获取对象
public static Person getInstance(){
return person;
}
}
饿汉式是线程安全的
懒汉式单例模式:
//懒汉式单例模式
public class Student {
//私有化构造函数
private Student(){}
//私有化Person类型属性
private static Student student;
//提供一个静态方法,外部通过该静态方法获取对象
public synchronized static Student getInstance(){
if(student==null){
student=new Student();
}
return student;
}
由于懒汉式单例模式是线程不安全的,所以要加锁;在方法上加锁效率比较低。还可以在方法体中加锁,这样效率会高一些。
//懒汉式单例模式
public class Student {
//私有化构造函数
private Student(){}
//私有化Person类型属性
private static Student student;
//提供一个静态方法,外部通过该静态方法获取对象
public static Student getInstance(){
if(student==null){
synchronized (Student.class) {
if(student==null){
student=new Student();
}
}
}
return student;
}