`

单例模式续

阅读更多

Singleton (单例模式)

 

Intent Ensure a class only has one instance , and provide a global point of access of it.

 

瞎谈:就是保证一个类只有一个实例,并且提供一个全局可访问的点。打个比方,广州限制每户人家养狗,但是只能养一条。一开始你没有狗,你去买一条。若干年后,狗不行失踪了。你为了填补寂寞的空虚,别人又送你一条(或者还是你自己买的)。我们不关注你的狗来源,只保证你家的狗每时每刻就一条。你为了确保以后养狗方便,就到保险公司办了保险,他们承诺,你的狗要是出现意外事故,他们负责陪一条给你。从此,你自由了,狗的事情交给别人了,而且别人也保证只给一条给你。

 

正经:很多时候我们要保证类的实例只有一个。我们可能在自己的代码中判断需要的类的实例有无,无就new一个。这样看似不错。问题是,你用到这个类的地方有n个,这样你就需要n个判断。为什么不把这个职责交给类本身呢?然后让类提供一个接口访问

 

代码实现:

public class Singleton {

private static Singleton singleton=null;

private Singleton()  {}

public static Singleton instance(){

   if(singleton==null)

      singleton = new Singleton();

   return singleton

      return singleton;

}

}

 

有无问题:碰上多线程怎么办?凉拌了。加锁吧,或者。。。前人总结的经验,有3中方法

1.       直接加锁

 

public class Singleton{

private static Singleton singleton=null;

private Singleton() {}

public static synchronized Singleton instance(){

   if(singleton==null)

      singleton = new Singleton();

   return singleton

      return singleton;

}

}

 

 

 

 

2.       早期实例化

public class Singleton{

private static Singleton singleton = new Singleton();

private Singleton();

public static Singleton getInstance(){

   return singleton;

}

}

 

 

 

 

3.       双重检测锁



  •  
    1. public class Singleton   
    2.   
    3. {   
    4.   
    5.    private volatile static Singleton singleton=null;   
    6.   
    7.    private Singleton(){}   
    8.   
    9.    public static Singleton getInstance()   
    10.   
    11.    {   
    12.   
    13.               if(singleton==null)   
    14.   
    15.         {    synchronized(Singleton.class)   
    16.   
    17.                      {   
    18.                           if(singleton == null){   
    19.   
    20.                            singleton=new Singleton();   
    21.                            }   
    22.   
    23.                      }   
    24.   
    25.          }   
    26.   
    27.          return singleton;   
    28.   
    29.     }   
    30. }  
  • 
    
    
    
    
    
    
    

    
    

     4.还有一种线程安全的

     

     

     

    public class Singleton {   
      // Private constructor prevents instantiation from other classes   
      private Singleton() {}   
      
      /**  
       * SingletonHolder is loaded on the first execution of Singleton.getInstance()   
       * or the first access to SingletonHolder.INSTANCE, not before.  
       */  
      private static class SingletonHolder {    
        private static final Singleton INSTANCE = new Singleton();   
      }   
      
      public static Singleton getInstance() {   
        return SingletonHolder.INSTANCE;   
      }   
    }  
    

     

     

     

    分享到:
    评论

    相关推荐

      IOS基于ASIHttpRequest的封装,使用单例模式断点续传

      本项目是基于ASIHttpRequest的封装,特别针对iOS应用中的文件下载,尤其是实现了断点续传功能,并采用单例模式进行设计。以下是关于这个项目的关键知识点的详细说明: 1. **ASIHttpRequest**:ASIHttpRequest是Sam ...

      labview 设计模式

      - **解决方案**:设计断点续传功能,保存关键状态信息至非易失性存储介质中,以便在断电后迅速恢复到断电前的状态。 10. **同步机制**:如何保证多点采样时的同步性? - **解决方案**:通过精确的时间戳管理和...

      iOS 断点续传

      3. **单例模式**:描述中提到的“通过单例模式快速获取对象”是指在iOS应用中,为了方便全局访问和管理断点续传的状态,通常会使用单例设计模式来创建一个共享的下载管理器。这样,任何地方都可以随时查询或控制下载...

      设计模式可复用面向对象软件的基础.rar

      创建型模式如工厂模式、抽象工厂模式、单例模式等,主要关注对象的创建过程,使系统的整体结构更易于管理和维护。结构型模式如适配器模式、装饰器模式、代理模式等,关注如何将不同的类或对象组合在一起,形成新的...

      二十三种设计模式【PDF版】

      设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

      JAVA 版本 断点续传

      - 单例模式管理文件传输的状态信息,确保全局唯一。 - 观察者模式用于监听传输进度,及时更新用户界面。 6. **挑战与优化**: - 网络波动可能导致传输失败,需要有重试机制。 - 高并发下的资源竞争和同步问题,...

      23设计模式简讲

      - **模式定义**:单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。 #### 结构型模式 6. **ADAPTER** - **场景解析**:在一次聚会中遇到了来自香港的美女Sarah,但由于语言障碍...

      Java多线程与线程安全实践-基于Http协议的断点续传.zip

      7. **设计模式**:可能用到的设计模式包括单例模式(为全局资源管理提供唯一入口)、工厂模式(创建线程对象)以及模板方法模式(定义线程的基本行为)等。 8. **源码分析**:这个项目包含73个子文件,意味着可能有...

      单文档多线程断点续传源码

      例如,可能会采用工厂模式创建线程,观察者模式更新进度,或者单例模式管理全局状态。 10. **测试与调试**:为了保证代码的正确性和健壮性,源码应该包含测试用例,覆盖各种可能的边界条件和异常情况。调试工具和...

      ACCP5.0-S1-C#项目教程(续)

      9. **设计模式**:介绍常见的设计模式,如单例模式、工厂模式、观察者模式等,提升代码的可维护性和可扩展性。 每个PPT文件(TP5V1.0.ppt、TP6V1.0.ppt、TP8V1.0.ppt、TP7V1.0.ppt)可能会对应课程的不同部分,比如...

      【Java课程设计】多任务下载器(进度条+断点续传).zip

      8. **设计模式**:为了保持代码的可维护性和扩展性,可以应用设计模式,如工厂模式用于创建线程,观察者模式用于更新进度条等UI组件,单例模式用于管理全局资源。 9. **用户界面**:虽然没有具体提到GUI,但实现一...

      Windows应用高级编程-C#编程篇 续

      9. **设计模式**:学习并应用各种设计模式,如工厂模式、单例模式、观察者模式等,提升代码可维护性和复用性。 10. **UWP应用开发**:UWP提供了一种统一的跨设备开发方式,可以创建适用于Windows 10的现代应用,...

      某某大厂程序员面试简历模板

      * MVVM 模式、抽象工厂、单例模式、适配器模式、策略模式、观察者模式等设计模式 * ORM+依赖注入框架(INiject)+反射,MVC 三层架构+WCF 面向服务架构等 四、项目经验 * 项目描述:内部文件管理系统开发,使用了 ...

      CC++多线程文件传输v2.2完整源码(断点续传 网络消息收发 高效率 界面与后台线程交互).rar

      7. **设计模式**:为了保持代码的可维护性和可扩展性,开发过程中可能会应用各种设计模式,如工厂模式用于创建不同类型的网络连接,单例模式用于管理全局资源,如网络连接或线程池。 8. **用户界面**:虽然描述中...

      Java 类QQ聊天及文件传输程序

      - **单例模式**:服务器端可能使用单例模式确保只有一个实例在运行,避免资源浪费和冲突。 - **观察者模式**:当有新消息到来时,可以使用观察者模式通知所有在线用户。 通过这个项目,学习者不仅可以掌握Java...

      Java 小例子合集 demo

      Java小例子可能包含了常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、代理模式等,这些都是提升代码可维护性和扩展性的重要工具。 7. **线程**: 多线程是Java的一个核心特性,允许并发执行任务...

      JAVA文件传输(论文+源代码).rar

      7. **设计模式**:可能在项目中运用到的设计模式包括工厂模式(创建Socket对象)、单例模式(管理Socket连接)和观察者模式(用于文件传输进度的更新通知)等。 8. **论文部分**:这部分可能涵盖了项目的背景介绍、...

      JAVA学习笔记

      在笔记中,可能会深入探讨类与对象、接口、抽象类等核心概念,以及如何运用设计模式如工厂模式、单例模式和观察者模式等。 其次,JAVA的多线程设计模式是提升程序并发性能的关键。JAVA提供了丰富的线程API,包括...

      应届程序员简历.docx

      - 熟练运用MVVM模式及多种设计模式,如抽象工厂、单例模式、适配器模式、策略模式和观察者模式。 6. **责任描述**:在项目中,负责文档管理模块,使用uploadly实现文件上传和续传,MD5加密下载,索引支持高级搜索...

      Android优化大师实例源码

      "AndroidManager"可能包含了不同的模块,如内存管理、CPU使用监控、电量优化等,每个模块可能使用了单例模式、工厂模式或观察者模式等。了解这些设计模式的应用,可以帮助我们在自己的项目中实现更高效、可扩展的...

    Global site tag (gtag.js) - Google Analytics