s186

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

所谓的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获取其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但是,在类的内部依然可以产生该类的对象。因为在类的外部开始还无法得到该类的对象,只能调用类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

:::success
单例模式:保证某个类在系统中永远只能创建一个实例
两种形态:饿汉式(先将实例创建好)
懒汉式(等需要的时候再来创建)
:::

1、饿汉式

保证某个类在系统中永远只能创建一个实例
将构造方法私有化,不让外部的类来创建实例

public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {
        // 私有构造方法
    }

    public static EagerSingleton getInstance() {
        return instance;
    }

    // 其他方法和属性...
}

2、懒汉式

懒汉式:等需要再创建 判断是否为空 为空再创建
不用就不会创建  
好处:节省内存占用

public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {
        // 私有构造方法
    }

    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }

    // 其他方法和属性...
}

3、饿汉式和懒汉式的组合

public class People {

    /**
     * 将或构造方法私有化,不让外部的类来创建实例
     */
    private People() {}

    /**
     * 使用静态内部类来创建一个唯一的外部类实例
     */
    private static class InnerClass {
        //创建一个唯一的外部类实例
        private static final People INSTANCE = new People();
    }
    /**
     * 对外部提供一个公开的方法获取实例
     * @return
     */
    public static People getInstance() {
        //当使用InnerClass时才会加载这个内部类,从而初始化People的实例
        return InnerClass.INSTANCE;
    }

    public void say() {
        System.out.println("Hello world");
    }
}
posted on 2023-06-01 16:12  186的博客  阅读(19)  评论(0)    收藏  举报