设计模式之单例设计模式

单例设计模式

单例模式就是解决不管创建了多少次对象,始终得到的都是同一个对象,并且提供一种可以访问这个对象的方式,可以直接访问,不需要实例化该类的对象.

单例类的特点:
  1. 单例类只能有一个实例
  2. 这个实例必须由单例类自己创建
  3. 单例类需要提供给外界访问这个实例
单例类的作用

单例模式主要为了保证在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)
    }
}
相关推荐
海特伟业4 小时前
隧道调频广播覆盖-隧道调频广播无线覆盖系统建设要点、难点分析与解决应对
运维·设计模式
sg_knight4 小时前
设计模式实战:享元模式(Flyweight)
python·设计模式·享元模式·flyweight
Swift社区7 小时前
AI 时代,ArkUI 的设计模式会改变吗?
人工智能·设计模式
数据中穿行7 小时前
访问者设计模式全方位深度解析
设计模式
宁雨桥8 小时前
前端设计模式面试题大全
前端·设计模式
数据中穿行9 小时前
迭代器设计模式全方位深度解析
设计模式
数据中穿行9 小时前
观察者设计模式全方位深度解析
设计模式
程序员Terry9 小时前
别老写重复代码了!模版方法模式一次讲透
java·设计模式
数据中穿行9 小时前
建造者模式全方位深度解析
设计模式