单例模式

  

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

 

  1. 双重检查DCL
     1 public class Man {
     2     //DCL单例模式
     3     private static Man man = null;
     4 
     5     private Man() {
     6         //限制实例化
     7     }
     8 
     9     public static Man getInstance(){
    10         if (null == man){
    11             synchronized (man){
    12                 if (null == man){
    13                     //DoubleCheck 双重检查
    14                     man = new Man();
    15                 }
    16             }
    17         }
    18         return man;
    19     }
    20 }

     

  2. 使用枚举实现
     1 public enum  Singleton {
     2     //实现单例模式最简单、最佳的方法。自动支持序列化机制
     3     INSTANCE;
     4 
     5     public void noNameMethod(){
     6         //whatever
     7     }
     8 
     9     public static void main(String[] args) {
    10         Singleton instance = Singleton.INSTANCE;
    11         instance.noNameMethod();
    12     }
    13 
    14 }

     

  3. 饿汉式单例(直接实例化)
     1 public class  Singleton {
     2 
     3     //饿汉式,线程安全。可能会产生垃圾对象
     4     private static Singleton singleton = new Singleton();
     5 
     6     private Singleton(){}
     7 
     8     public static Singleton getInstance(){
     9         return singleton;
    10     }
    11 
    12 }

     

  4. 懒汉式(线程不安全)
     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4   
     5     public static Singleton getInstance() {  
     6     if (instance == null) {  
     7         instance = new Singleton();  
     8     }  
     9     return instance;  
    10     }  
    11 }

     

  5. 懒汉式(线程安全)
     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4     public static synchronized Singleton getInstance() {  
     5     if (instance == null) {  
     6         instance = new Singleton();  
     7     }  
     8     return instance;  
     9     }  
    10 }

     

转载于:https://www.cnblogs.com/dzyls/p/9484303.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值