23种设计模式之一(单例模式)

摘要:
应用场景:1、在资源共享的情况下,避免资源操作带来的性能或损失。如日志文件、应用程序配置等。2.在控制资源的情况下,资源之间的通信很方便。

单例模式:(确保一个类最多只有一个实例,并提供一个全局访问点)

    23种设计模式之一(单例模式)第1张

存在的意义:

  有些对象我们只需要一个,如:线程池、缓存、硬件设备等;如果使用多个实例就会造成冲突、不一致等;

  比如打印机这个类,如果多个对象同时使用它的输出,打印机类就产生了多个实例,就可能造成打印顺序和内容的混乱;

线程最安全,效率最高的一种写法:

23种设计模式之一(单例模式)第2张23种设计模式之一(单例模式)第3张
 1 public class Singleton {
 2     private Singleton(){}
 3     private static volatile Singleton instance;
 4     //volatile是给编译器用的
 5     //定义静态私有变量,不初始化,不使用fina;
 6     //使用volatile保证了多线程访问instance变量的可见性,
 7     //避免了instance初始化时其它变量属性还没完成赋值是被另外的线程调用
 8     public static Singleton getInstance(){
 9         if (instance == null) {
10             synchronized(Singleton.class){
11                 //双重锁保证了创建对象不会被重复执行,
12                 //synchronized代码块也很少重复执行,
13                 //相比在getInstance方法前添加synchronized更加节约资源
14                 if (instance == null) {
15                     instance = new Singleton();
16                 }
17             }
18         }
19         return instance;
20         
21     }
22 }
View Code

事实上,java通过反射机制实例化private类型的构造方法时,此时会使基本上所有的java单例实现失效;

获取单例对象需要保证线程安全,其中方法也要保证线程安全:

  说明:资源驱动类,工具类,单例工厂类都需要注意。

应用场景:

  1、资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置等。

  2、控制资源的情况下,方便资源之间的互相通信。如线程池等。

免责声明:文章转载自《23种设计模式之一(单例模式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇msfvenom参数简介PyTorch的自动混合精度(AMP)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入单例模式

单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好、用对单例模式,还真得费一番脑筋。本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正。 饿汉法 顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下: public class Singleton { private...

设计模式(一)单例模式:2-懒汉模式(Lazy)

思想: 相比于饿汉模式,懒汉模式实际中的应用更多,因为在系统中,“被用到时再初始化”是更佳的解决方案。 设计思想与饿汉模式类似,同样是持有一个自身的引用,只是将 new 的动作延迟到 getinstance() 方法中执行。 public final classLazySingleton { private staticLazySingleton...

PHP的单例模式

单例模式顾名思义,就是只有一个实例。 作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 这个类我们称之为单例类。 单例模式的要点有三个: 一是某个类只能有一个实例; 二是它必须自行创建这个实例; 三是它必须自行向整个系统提供这个实例。 下面我们讨论下为什么要使用PHP单例模式? 多数人都是从单例模式的字面上的意...

iOS开发-单例模式

什么是单例模式?>是开发设计模式(共23种)中的1种>它可以保证在程序运行过程,一个类只有一个实例(一个对象),而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源>使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) iOS系统中的一些单例UIApplication(应用程序实例) NSNoti...

单例模式——java设计模式

单例模式 目录: 一、何为单例 二、使用Java EE实现单例模式 三、使用场景 一、何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 **1.1 单例模式类图 **               1.2 单例模式实现 (1)简单实现 public class MySingleton1 { private static MySingleto...

java 单例模式

单例模式 : 一个类创建的 任何对象都是同一个只存在一个实例,都只开辟同一块内存空间 单例模式就是不管外部如何创建 都只是创建一个对象 对象操作的也是只个唯一对象 饿汉式: public classSingleton { public static voidmain(String[] args) { Pattern patternO...