设计模式(单例模式)-SingletonPattern

xiaoxiao2021-02-28  99

1 什么是单例模式

A 这些类只能有一个实例

B 这些能够自动实例化

C 这个类对整个系统可见,即鼻血面向整个系统提供这个实例

案例:应用程序主菜单,教室内只有一个黑板。

UML图

《单例模式》 Singleton

-------------------------------------

- Singleton singleton

----------------------------------

+ Singgleton getInstance()

2 单例模式分类

2.1 饿汉模式----直接创建 -----线程安全- (真正使用时再加载  类加载时不初始化)

2.2 懒汉模式 ---用的时候才加载------ 懒汉模式要加synchronize 保证线程安全-----(类初始化就实例化,类加载慢,但获取对象的速度快)

2.3 双检查

volatile 关键字的一个重要作用是禁止指令重排

其保证在弯沉给一个写操作 123 完成前 不会用读操作

3 懒汉模式要素

3.1 私有构造方法

3.2 指向自己实例的私有静态引用

3.3 以自己的实例作为返回值的静态公有方法

4 代码实现

4.1 饿汉模式------直接初始化 -- 使用使才初始化 方法 静态2个 直接弯沉初始化  公开1个静态获取:

public class Singleton{

//饿汉单例模式------直接创建---- //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

          private static Singleton singleton = new Singleton();

//静态私有成员,已初始化    private Single(){};  //私有构造函数     public static Singleton  getInstance(){  //静态,不用同步(类加载时已初始化,不会有多线程的问题)

         return singleton;  

    }

}

4.2 懒汉模式----------很懒 用的时候才加载------ 关键字 synchronize

pulic class Singleton{

  private static final Single instance  = null ;

  pubilic static sychronized getInstance(){

  if (singleton == null){

  singleton = new Singleton(); 

}

  return singleton;

}

}

4.3 双重锁---懒汉模式-非安全

public class Singleton{

   private static  volatile Singele instance = null;

   private single();   //构造器私有 防止外部类调用

   public static Singleton getInstance(){

   if(instance == null){

   synchronized(SingletonClass.class){

   if(instance == null){

     instance = new Single();

   }

    }

}

   return instance;

}

}

5 单例模式的优点:

在内存上只有一个对象,节省内存空间

避免重复创建销毁,可以提高性能

避免对共享资源的多重占用

可以全局访问

转载请注明原文地址: https://www.6miu.com/read-23772.html

最新回复(0)