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. 双重检测锁
- public class Singleton
-
- {
-
-
private volatile static Singleton singleton=null;
-
-
private Singleton(){}
-
-
public static Singleton getInstance()
-
- {
-
-
if(singleton==null)
-
-
{ synchronized(Singleton.class)
-
- {
-
if(singleton == null){
-
-
singleton=new Singleton();
- }
-
- }
-
- }
-
-
return singleton;
-
- }
- }
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;
}
}
分享到:
相关推荐
本项目是基于ASIHttpRequest的封装,特别针对iOS应用中的文件下载,尤其是实现了断点续传功能,并采用单例模式进行设计。以下是关于这个项目的关键知识点的详细说明: 1. **ASIHttpRequest**:ASIHttpRequest是Sam ...
- **解决方案**:设计断点续传功能,保存关键状态信息至非易失性存储介质中,以便在断电后迅速恢复到断电前的状态。 10. **同步机制**:如何保证多点采样时的同步性? - **解决方案**:通过精确的时间戳管理和...
3. **单例模式**:描述中提到的“通过单例模式快速获取对象”是指在iOS应用中,为了方便全局访问和管理断点续传的状态,通常会使用单例设计模式来创建一个共享的下载管理器。这样,任何地方都可以随时查询或控制下载...
创建型模式如工厂模式、抽象工厂模式、单例模式等,主要关注对象的创建过程,使系统的整体结构更易于管理和维护。结构型模式如适配器模式、装饰器模式、代理模式等,关注如何将不同的类或对象组合在一起,形成新的...
设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...
- 单例模式管理文件传输的状态信息,确保全局唯一。 - 观察者模式用于监听传输进度,及时更新用户界面。 6. **挑战与优化**: - 网络波动可能导致传输失败,需要有重试机制。 - 高并发下的资源竞争和同步问题,...
- **模式定义**:单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。 #### 结构型模式 6. **ADAPTER** - **场景解析**:在一次聚会中遇到了来自香港的美女Sarah,但由于语言障碍...
7. **设计模式**:可能用到的设计模式包括单例模式(为全局资源管理提供唯一入口)、工厂模式(创建线程对象)以及模板方法模式(定义线程的基本行为)等。 8. **源码分析**:这个项目包含73个子文件,意味着可能有...
例如,可能会采用工厂模式创建线程,观察者模式更新进度,或者单例模式管理全局状态。 10. **测试与调试**:为了保证代码的正确性和健壮性,源码应该包含测试用例,覆盖各种可能的边界条件和异常情况。调试工具和...
9. **设计模式**:介绍常见的设计模式,如单例模式、工厂模式、观察者模式等,提升代码的可维护性和可扩展性。 每个PPT文件(TP5V1.0.ppt、TP6V1.0.ppt、TP8V1.0.ppt、TP7V1.0.ppt)可能会对应课程的不同部分,比如...
8. **设计模式**:为了保持代码的可维护性和扩展性,可以应用设计模式,如工厂模式用于创建线程,观察者模式用于更新进度条等UI组件,单例模式用于管理全局资源。 9. **用户界面**:虽然没有具体提到GUI,但实现一...
9. **设计模式**:学习并应用各种设计模式,如工厂模式、单例模式、观察者模式等,提升代码可维护性和复用性。 10. **UWP应用开发**:UWP提供了一种统一的跨设备开发方式,可以创建适用于Windows 10的现代应用,...
* MVVM 模式、抽象工厂、单例模式、适配器模式、策略模式、观察者模式等设计模式 * ORM+依赖注入框架(INiject)+反射,MVC 三层架构+WCF 面向服务架构等 四、项目经验 * 项目描述:内部文件管理系统开发,使用了 ...
7. **设计模式**:为了保持代码的可维护性和可扩展性,开发过程中可能会应用各种设计模式,如工厂模式用于创建不同类型的网络连接,单例模式用于管理全局资源,如网络连接或线程池。 8. **用户界面**:虽然描述中...
- **单例模式**:服务器端可能使用单例模式确保只有一个实例在运行,避免资源浪费和冲突。 - **观察者模式**:当有新消息到来时,可以使用观察者模式通知所有在线用户。 通过这个项目,学习者不仅可以掌握Java...
Java小例子可能包含了常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、代理模式等,这些都是提升代码可维护性和扩展性的重要工具。 7. **线程**: 多线程是Java的一个核心特性,允许并发执行任务...
7. **设计模式**:可能在项目中运用到的设计模式包括工厂模式(创建Socket对象)、单例模式(管理Socket连接)和观察者模式(用于文件传输进度的更新通知)等。 8. **论文部分**:这部分可能涵盖了项目的背景介绍、...
在笔记中,可能会深入探讨类与对象、接口、抽象类等核心概念,以及如何运用设计模式如工厂模式、单例模式和观察者模式等。 其次,JAVA的多线程设计模式是提升程序并发性能的关键。JAVA提供了丰富的线程API,包括...
- 熟练运用MVVM模式及多种设计模式,如抽象工厂、单例模式、适配器模式、策略模式和观察者模式。 6. **责任描述**:在项目中,负责文档管理模块,使用uploadly实现文件上传和续传,MD5加密下载,索引支持高级搜索...
"AndroidManager"可能包含了不同的模块,如内存管理、CPU使用监控、电量优化等,每个模块可能使用了单例模式、工厂模式或观察者模式等。了解这些设计模式的应用,可以帮助我们在自己的项目中实现更高效、可扩展的...