(21)有些类也需计划生育——单例模式

最后更新于:2022-04-01 14:30:49

### 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。(摘抄) 解决的问题:保证一个类在内存中的对象唯一性。 比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。 ~~~ public class Singleton { private Singleton(){} private static Singleton singleton; public static Singleton getSingleton() { if (singleton == null) { singleton = new Singleton(); } return singleton; } } class Client { public static void main() { Singleton singleton1 = Singleton.getSingleton(); Singleton singleton2 = Singleton.getSingleton(); if (singleton1 == singleton2) { System.out.println("yes"); } else { System.out.println("no"); } } } ~~~ 上面这种单例模式的类加载方式被称为懒汉式(延迟加载方式) 下面这种为饿汉式 ~~~ public class Singleton { private Singleton(){} private static Singleton singleton = new Singleton(); public static Singleton getSingleton() { return singleton; } } ~~~ 饿汉式在多线程时不会重复生成实例,因为静态初始化让它在程序加载的时候已经生成实例了,懒汉式如果要在多线程时也不出问题,那么需要双重锁定 ~~~ public class Singleton { private Singleton(){} private static Singleton singleton; public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } } ~~~ 这样懒汉式也可以在多线程时调用了。
';