常见的单例模式
什么是单例
单例模式:是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
单例模式可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象
注意
1. 单例类只能有一个实例。
2. 单例类必须自己创建自己的唯一实例。
3. 单例类必须给所有其他对象提供这一实例。
常见的单例模式:饿汉单例和懒汉单例
饿汉单例:在用类获取对象的时候,对象已经提前为你创建好了
设计步骤:
1.定义一个类,把构造器私有
2.定义一个静态变量存储一个对象
实现:
public class SingleIstance {
public static SingleIstance instance=new SingleIstance();
/**
* 必须把构造器私有化
* */
private SingleIstance(){
}
}
测试
public class Test1 {
public static void main(String [] args){
//不合法的构造函数
//编译时错误:构造函数 SingleIstance() 是不可见的
//SingleIstance s1=new SingleIstance(); 报错
SingleIstance s1=SingleIstance.instance;
SingleIstance s2=SingleIstance.instance;
System.out.println(s1==s2); //true 表名实现了单例
}
}
懒汉单例:在真正需要改对象的时候,才去创建一个对象(延迟加载对象)
设计步骤:
定义一个类,把构造器私有
定义一个静态变量存储一个对象
提供一个返回单例对象的方法
实现:
public class SingleInstance2 {
private static SingleInstance2 instance; //最好私有化,这样可以避免给别人挖坑
/**
* 2.定义一个静态的成员变量负责存储一个对象
*
* 只加载一次,只有一份,
* 最好私有化,这样可以避免给别人挖坑
* */
public static SingleInstance2 getInstance(){
if(instance==null){
//第一次来拿对象,此时需要创建对象
instance=new SingleInstance2();
}
return instance;
}
/**
* 3.提供一个方法,对外返回单例对象
* */
public SingleInstance2(){}
/**
* 1.私有化构造器
* */
}
测试:
public class Test2 {
public static void main(String [] args){
//SingleIstance s1=new SingleIstance(); 报错
SingleInstance2 s1=SingleInstance2.getInstance();
SingleInstance2 s2=SingleInstance2.getInstance();
System.out.println(s1==s2); //true 表名实现了单例
}
}