单例设计模式
单例模式就是解决不管创建了多少次对象,始终得到的都是同一个对象,并且提供一种可以访问这个对象的方式,可以直接访问,不需要实例化该类的对象.
单例类的特点:
- 单例类只能有一个实例
- 这个实例必须由单例类自己创建
- 单例类需要提供给外界访问这个实例
单例类的作用
单例模式主要为了保证在java应用程序中,一个类只有一个实例存在
注意: 以下这两种单例模式只适合小并发的系统, 一旦到了多线程,高并发的场景,以下逻辑就会被全部推翻打乱,你就要升维了,就要学习高并发了
懒汉式单例模式
懒汉式: 类加载时不会创建该单实例对象,首次使用该对象时才会创建
java
class Flower {
private static Flower flower = null;
//构造方法私有化,不允许在类外部创建对象
private Flower() {
}
//提供一个公共的访问方式,让外界可以获取到该类的对象
public static Flower getFlower() {
//如果instance为null,表明还没有创建该类的对象,进行创建
if (flower == null) {
flower = new Flower();
}
//如果不为null,表明已经创建过该类的对象,根据单例类只能创建一个对象的特点,因此直接返回flower
return flower;
}
}
//使用的时候创建对象
饿汉式单例模式
java
//一开始就把创建对象创建好
class Flower {
//在类中创建本类对象
private static Flower flower = nwe Flower();
//构造方法私有化,不允许在类外部创建对象
private Flower() {
}
//提供一个公共的访问方式,让外界可以获取该类对象,static是因为外界不需要创建对象,直接用类访问
public static Flower getFlower() {
return flower;
}
}
public class Test{
public static void main(String[] args){
//创建Flower类的对象 这个时候就无法用new创建了,因为Flower的构造方式是私有的
Flower f1=Flower.getFlower();
Flower f2=Flower.getFlower();
判断两个对象是不是同一个
System.out.println(f1 == f2)
}
}