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

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 单例模式的优点:

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

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

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

可以全局访问


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值