Android设计模式之Singleton单例模式

加湿器方案-DLT8M04TS-杰力科创 基本组成: 一个触摸按键、一组RGB灯、一个雾化片、一个充电IC。 产品功能: 第一次上电光机状态,RGB红/绿/红灯依次闪烁灭; 2、按键功能:短按开关机和三档喷雾工作模式,第一次短按持续喷雾,短按第二次喷3S,停3S,短按第三次关闭喷雾模式,依次循环; 在喷雾或是不喷雾的状态下长按1.5S RGB灯渐变,一直循环,第二次长按当前灯光闪烁一下常亮,第三次长按关机; 3、持续喷雾定时5小时自动断电,间歇喷雾定时10小时自动断电,若在间歇工作时有切换为持续喷雾,那间歇喷雾的... 阅读详情


转自 - 

原文1:《Android 设计模式 之 单例模式》http://blog.youkuaiyun.com/liguangzhenghi/article/details/8076361

原文0:《主题:探索设计模式之六——单例模式》http://www.iteye.com/topic/575052


设计模式中,单例模式最要关心的则是对象创建的次数以及何时被创建。Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂,譬如涉及到DCL双锁检测(double checked locking)的讨论、涉及到多个类加载器(ClassLoader)协同时、涉及到跨JVM(集群、远程EJB等)时、涉及到单例对象被销毁后重建等。

目的:

希望对象只创建一个实例,并且提供一个全局的访问点。

图6.1 单例模式的UML图

结构是简单的,但是却存在一下情况;

1.最基本要求:每次从getInstance()都能返回一个且唯一的一个对象。

2.稍微高一点的要求:资源共享情况下,getInstance()必须适应多线程并发访问。

3.再提高一点的要求:提高访问性能。

4.最高要求:懒加载(Lazy Load),在需要的时候才被构造。


首先实现1中的单例模式A:

[java]  view plain copy
  1. 4.public class SingletonA {    
  2. 5.     
  3. 6.    /**  
  4. 7.     * 单例对象实例  
  5. 8.     */    
  6. 9.    private static SingletonA instance = null;    
  7. 10.     
  8. 11.    public static SingletonA getInstance() {    
  9. 12.        if (instance == null) {                              //line 12    
  10. 13.            instance = new SingletonA();          //line 13    
  11. 14.        }    
  12. 15.        return instance;    
  13. 16.    }    
  14. 17.}    

这个写法我们把四点需求从上往下检测,发现第2点的时候就出了问题,假设这样的场景:两个线程并发调用Singleton.getInstance(),假设线程一先判断完instance是否为null,既代码中的line 12进入到line 13的位置。刚刚判断完毕后,JVM将CPU资源切换给线程二,由于线程一还没执行line 13,所以instance仍然是空的,因此线程二执行了new Signleton()操作。片刻之后,线程一被重新唤醒,它执行的仍然是new Signleton()操作。所以这种设计的单例模式不能满足第2点需求。

下面我们继续


实现2中单例模式B:

[java]  view plain copy
  1. 4.public class SingletonB {    
  2. 5.     
  3. 6.    /**  
  4. 7.     * 单例对象实例  
  5. 8.     */    
  6. 9.    private static SingletonB instance = null;    
  7. 10.     
  8. 11.    public synchronized static SingletonB getInstance() {    
  9. 12.        if (instance == null) {    
  10. 13.            instance = new SingletonB();    
  11. 14.        }    
  12. 15.        return instance;    
  13. 16.    }    
  14. 17.}    

比起单例A仅仅在方法中多了一个synchronized修饰符,现在可以保证不会出线程问题了。但是这里有个很大(至少耗时比例上很大)的性能问题。除了第一次调用时是执行了SingletonKerriganB的构造函数之外,以后的每一次调用都是直接返回instance对象。返回对象这个操作耗时是很小的,绝大部分的耗时都用在synchronized修饰符的同步准备上,因此从性能上说很不划算。


实现3单例模式C:

[java]  view plain copy
  1. 4.public class SingletonC {    
  2. 5.     
  3. 6.    /**  
  4. 7.     * 单例对象实例  
  5. 8.     */    
  6. 9.    private static SingletonKerriganC instance = null;    
  7. 10.     
  8. 11.    public static SingletonC getInstance() {    
  9. 12.        if (instance == null) {    
  10. 13.            synchronized (SingletonC.class) {    
  11. 14.                if (instance == null) {    
  12. 15.                    instance = new SingletonC();    
  13. 16.                }    
  14. 17.            }    
  15. 18.        }    
  16. 19.        return instance;    
  17. 20.    }    
  18. 21.}    

看起来这样已经达到了我们的要求,除了第一次创建对象之外,其他的访问在第一个if中就返回了,因此不会走到同步块中。已经完美了吗?

我们来看看这个场景:假设线程一执行到instance = new SingletonKerriganD()这句,这里看起来是一句话,但实际上它并不是一个原子操作(原子操作的意思就是这条语句要么就被执行完,要么就没有被执行过,不能出现执行了一半这种情形)。事实上高级语言里面非原子操作有很多,我们只要看看这句话被编译后在JVM执行的对应汇编代码就发现,这句话被编译成8条汇编指令,大致做了3件事情:

1.给Kerrigan的实例分配内存。

2.初始化Kerrigan的构造器

3.将instance对象指向分配的内存空间(注意到这步instance就非null了)。

但是,由于Java编译器允许处理器乱序执行(out-of-order),以及JDK1.5之前JMM(Java Memory Medel)中Cache、寄存器到主内存回写顺序的规定,上面的第二点和第三点的顺序是无法保证的,也就是说,执行顺序可能是1-2-3也可能是1-3-2,如果是后者,并且在3执行完毕、2未执行之前,被切换到线程二上,这时候instance因为已经在线程一内执行过了第三点,instance已经是非空了,所以线程二直接拿走instance,然后使用,然后顺理成章地报错,而且这种难以跟踪难以重现的错误估计调试上一星期都未必能找得出来,真是一茶几的杯具啊。

DCL的写法来实现单例是很多技术书、教科书(包括基于JDK1.4以前版本的书籍)上推荐的写法,实际上是不完全正确的。的确在一些语言(譬如C语言)上DCL是可行的,取决于是否能保证2、3步的顺序。在JDK1.5之后,官方已经注意到这种问题,因此调整了JMM、具体化了volatile关键字,因此如果JDK是1.5或之后的版本,只需要将instance的定义改成“private volatile static SingletonKerriganD instance = null;”就可以保证每次都去instance都从主内存读取,就可以使用DCL的写法来完成单例模式。当然volatile或多或少也会影响到性能,最重要的是我们还要考虑JDK1.42以及之前的版本,所以本文中单例模式写法的改进还在继续。

代码倒越来越复杂了,现在先来个返璞归真,根据JLS(Java Language Specification)中的规定,一个类在一个ClassLoader中只会被初始化一次,这点是JVM本身保证的,那就把初始化实例的事情扔给JVM好了.


实现4单例模式D:

[java]  view plain copy
  1. 4.public class SingletonD {    
  2. 5.     
  3. 6.    /**  
  4. 7.     * 单例对象实例  
  5. 8.     */    
  6. 9.    private static SingletonD instance = new SingletonD();    
  7. 10.     
  8. 11.    public static SingletonD getInstance() {    
  9. 12.        return instance;    
  10. 13.    }    
  11. 14.}    


这种写法不会出现并发问题,但是它是饿汉式的,在ClassLoader加载类后Kerrigan的实例就会第一时间被创建,饿汉式的创建方式在一些场景中将无法使用:譬如实例的创建是依赖参数或者配置文件的,在getInstance()之前必须调用某个方法设置参数给它,那样这种单例写法就无法使用了。

可带参数单例模式E:

[java]  view plain copy
  1. 4.public class SingletonE {    
  2. 5.     
  3. 6.    private static class SingletonHolder {    
  4. 7.        /**  
  5. 8.         * 单例对象实例  
  6. 9.         */    
  7. 10.        static final SingletonE INSTANCE = new SingletonE();    
  8. 11.    }    
  9. 12.     
  10. 13.    public static SingletonE getInstance() {    
  11. 14.        return SingletonHolder.INSTANCE;    
  12. 15.    }    
  13. 16.}    


这种写法仍然使用JVM本身机制保证了线程安全问题;由于SingletonHolder是私有的,除了getInstance()之外没有办法访问它,因此它是懒汉式的;同时读取实例的时候不会进行同步,没有性能缺陷;也不依赖JDK版本。

当然,用户以其它方式构造单例的对象,如果设计者不希望这样的情况发生,则需要做规避措施。其它途径创建单例实例的方式有:

1.直接new单例对象

2.通过反射构造单例对象

3.通过序列化构造单例对象。

对于第一种情况,一般我们会加入一个private或者protected的构造函数,这样系统就不会自动添加那个public的构造函数了,因此只能调用里面的static方法,无法通过new创建对象。

对于第二种情况,反射时可以使用setAccessible方法来突破private的限制,我们需要做到第一点工作的同时,还需要在在 ReflectPermission("suppressAccessChecks") 权限下使用安全管理器(SecurityManager)的checkPermission方法来限制这种突破。一般来说,不会真的去做这些事情,都是通过应用服务器进行后台配置实现。

对于第三种情况,如果单例对象有必要实现Serializable接口(很少出现),则应当同时实现readResolve()方法来保证反序列化的时候得到原来的对象。


终极版单例模式F:

[java]  view plain copy
  1. 4.public class SingletonF implements Serializable {    
  2. 5.     
  3. 6.    private static class SingletonHolder {    
  4. 7.        /**  
  5. 8.         * 单例对象实例  
  6. 9.         */    
  7. 10.        static final SingletonF INSTANCE = new SingletonF();    
  8. 11.    }    
  9. 12.     
  10. 13.    public static SingletonF getInstance() {    
  11. 14.        return SingletonHolder.INSTANCE;    
  12. 15.    }    
  13. 16.     
  14. 17.    /**  
  15. 18.     * private的构造函数用于避免外界直接使用new来实例化对象  
  16. 19.     */    
  17. 20.    private SingletonF() {    
  18. 21.    }    
  19. 22.     
  20. 23.    /**  
  21. 24.     * readResolve方法应对单例对象被序列化时候  
  22. 25.     */    
  23. 26.    private Object readResolve() {    
  24. 27.        return getInstance();    
  25. 28.    }    
  26. 29.}    

2、android中源码单例模式举例

1、日历模块 

App路径:packages/providers/CalendarProvider

文件:packages/providers/CalendarProvider/src/com/android/provider/calendar/CalendarDatabaseHelper.java

单例代码:

[java]  view plain copy
  1. private static CalendarDatabaseHelper sSingleton = null;      
  2. public static synchronized CalendarDatabaseHelper getInstance(Context context) {  
  3.         if (sSingleton == null) {  
  4.             sSingleton = new CalendarDatabaseHelper(context);  
  5.         }  
  6.         return sSingleton;  
  7.     }  
可以看出,这是用到了2中的单例模式B.


2.Collator类

文件:libcore/luni/src/main/java/com/ibm/icu4jni/text/Callator.java

libcore/luni/src/main/java/com/ibm/icu4jni/text/RuleBasedCallator.java

单例代码:

[java]  view plain copy
  1. public static Collator getInstance(Locale locale) {  
  2.     return new RuleBasedCollator(locale);  
  3. }  
  4. p;     
[java]  view plain copy
  1.     RuleBasedCollator(Locale locale) {  
  2.         m_collator_ = NativeCollation.openCollator(locale.toString());  
  3.     }  
  4.       
[java]  view plain copy
  1. static native int openCollator(String locale);  

这就是上面给出的单例模式E,可带参数的单例模式


3.Editable类

文件:frameworks/base/core/java/android/text/Editable.java

[java]  view plain copy
  1. private static Editable.Factory sInstance = new Editable.Factory();  
  2.   
  3. /** 
  4.  * Returns the standard Editable Factory. 
  5.  */  
  6. public static Editable.Factory getInstance() {  
  7.     return sInstance;  
  8. }  

可见这是单例模式D是实例应用

4.AccessibilityManager类

文件:frameworks/base/core/java/android/view/accessibility/AccessibilityManager.java

[java]  view plain copy
  1. public static AccessibilityManager getInstance(Context context) {  
  2.     synchronized (sInstanceSync) {  
  3.         if (sInstance == null) {  
  4.             sInstance = new AccessibilityManager(context);  
  5.         }  
  6.     }  
  7.     return sInstance;  
  8. }  

这是单例模式C的应用。

android使用单例模式的地方很多,特别是数据库创建时,就会使用到单例模式。因每种单例模式试用场景不一样,所以android在不同地方使用了不同的单例模式实现方式。

别把 ABAP 时间戳当数字算:TIMESTAMP / TIMESTAMPL 的语义、正确用法与项目级避坑指南 ABAP时间戳使用指南与常见陷阱 摘要:ABAP中的时间戳(TIMESTAMP/TIMESTAMPL)本质是UTC时间的数字表示,而非累计秒数。正确用法包括:直接比较时间戳顺序、使用CONVERT TIME STAMP进行时区转换、通过CL_ABAP_TSTMP计算时间差。关键注意事项:绝对不要对时间戳本身进行数学运算,否则会导致非法时间值。实际项目中需特别注意SAP Gateway的ETag处理、跨时区系统集成和CDS视图中的时间戳使用场景,避免将本地时间误存为UTC时间戳或在云迁移时产生时区问题。(14 阅读详情

相关推荐

探索热阻测试仪在半导体器件热管理中的应用与前景

T3Ster是MicReD研发的热测试仪,运用JEDEC稳态实时测试方法,专业测试分离或集成的双极型晶体管、MOS晶体管、常见的三极管、LED封装和半导体闸流管等器件的热特性。利用瞬态温升技术,可测得器件稳态热阻和温升,不但可以测得半导体器件稳态热阻和温升,而且可以直接测量各部分对于温升的贡献,计算芯片热流路径上的纵向热阻构成,对器件热可靠性设计、散热问题解决、产品性能提升和长期可靠性至关重要。关键词:T3ster,Micred,功率循环,结温测试,热阻测试,结温热阻测试,半导体热特性测试;

anscos_Olivia的博客 898

java 中文排序。

关键字:java,排序,中文,pinyin4j,笔画,GBK,GB2312,拼音,代码点 1       问题提出 汉字排序不同于英文字母的排序,主要有两种排序方式:一种是按拼音首字母排序;一种是按笔画排序。大多数情况下是按拼音首字母排序。那汉字究竟怎样通过其拼音首字母排序呢?好在字符集帮我们解决了这个问题。 众所周知的包含汉字的字符集有gb2312和GBK,后者是前者的扩展。Gb2312在

laukaka的专栏 3263

华为产品安全基线

一、敏感信息安全传输 1、采用HTTPS安全协议传输 2、客户端本地保存的敏感信息,需要先加密再保存使用,不可逆支持PBKDF2(迭代10000次)加密保存,可逆支持AES256+IV保存,密钥支持可更新 二、认证鉴权 1、License中心与分析节点分布式部署,需要做用户名+口令安全认证,支持使用HTTPS安全协议。 2、客户端登录支持防暴力破解,支持验证码,多次连续尝试登陆失败后锁定账...

zileixu的博客 1万+

java 拼音排序:Collator类

项目场景: 在显示结果时,按汉字的拼音首字母排序显示。 问题描述: 直接用compare排序的结果不符合预期,应该是按Unicode编码排序的 原因分析: Java使用Unicode编码,其中中文Unicode字符集来源于GB18030,GB18030又由GB2312发展起来。 GB2312 是一个包含 7000 多个字符的字符集,它按拼音排序,并且是连续的,之后的 GBK、GB2312 都是在此基础上扩充而来,所以要让它们完整排序难上加难了。 但如果排序对象是经常使用的汉字,使用Colla.

m0_59327623的博客 1634

【一步到位】Android Studio 实现安卓连接阿里云物联网云平台

最新版本目前是Android Studio Iguana | 2024.1.2,你可以到官网上去找之前的版本,手上有工作项目的不要去轻易尝试,说不定你就编译失败了,失败了也不要担心,解决就可以了。

m0_73799445的博客 1万+

【全覆盖算法】Boustrophedon Cellular Decomposition(BCD)原理及实现

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 503

Android 设计模式 之 单例模式

1、单例模式常见情景 设计模式中,最简单不过的就是单例模式。先看看单例模式 原文:http://www.iteye.com/topic/575052 Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂,譬如涉及到DCL

fangchongbory的专栏 6845

基于ESP32的智能厨房控制系统开发

随着智能家居技术的发展,越来越多的家庭开始将传统的厨房设备进行智能化改造,以提高烹饪效率和生活质量。智能厨房控制系统是物联网(IoT)应用的重要组成部分,它将家居设备、传感器和网络结合起来,提供便捷的控制与监测功能,使厨房的烹饪过程更加智能、便捷和安全。基于ESP32的智能厨房控制系统不仅能够实现远程控制和监控,还能实现温度、湿度、烹饪状态的实时反馈,甚至具备智能化的推荐和自动化控制能力。ESP32是一款功能强大、集成度高的嵌入式开发平台,具有Wi-Fi和蓝牙双模通信能力,广泛应用于物联网设备的开发。

2201_76125393的博客 659

java .getinstance_Java Collator getInstance()用法及代码示例

java.text.Collat​​or类的getInstance()方法用于获取具有当前默认语言环境的新整理对象。用法:public static Collator getInstance()参数:此方法不接受任何参数。返回值:它提供了具有当前默认语言环境的新整理者对象。下面是说明getInstance()方法的示例:范例1:// Java program to demonstrate// ge...

weixin_42566072的博客 1399

HandwrittenMathFormulaRecognition:基于YOLOv8的手写数学公式识别系统

输入:包含手写数学公式的图像(拍摄的板书、作业纸等)输出:对应的数字文本形式的数学公式(如LaTeX格式或文本表达式)标准的手写数学表达式数据集,包含在线轨迹及图片,广泛用于公式识别研究。包含近10万对公式图片及对应的LaTeX标注,适合训练公式识别模型。MathBrush公开手写数学公式图像数据集,含多种书写风格。手写数字与符号数据集(MNIST及其扩展)用于基础数学符号的训练。

YOLO 283

2026年OPPO嵌入式岗位面试题带详细答案

本文总结了OPPO嵌入式岗位面试的核心考点,涵盖硬件驱动、系统启动、Linux内核开发等7大模块共34道典型题目。重点解析了SPI通信协议、中断处理、U-Boot启动流程、Linux驱动开发等关键技术,突出硬件调试与工程实践能力考核。题目设置贴合实际岗位需求,适合校招与社招驱动开发岗位应聘者系统复习,帮助掌握嵌入式开发的核心知识与面试要点。

Open 492

Python依赖注入框架安装与配置指南

`python-dependency-injector` 是一个用于Python的依赖注入框架。依赖注入(Dependency Injection,简称DI)是一种设计模式,用于减少软件组件之间的耦合度,提高代码的可测试性和灵活性。此框架允许开发者在容器中声明如何构建对象以及它们之间的依赖关系,从而实现依赖的自动装配。 项目主要使用的编程语言是Python,同时也使用了Cython来提高性能。 ...

gitblog_00760的博客 1007

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 151

Android设计模式之单例模式(Singleton Pattern)

Android设计模式之单例模式(Singleton Pattern) 个人总结学习和研究,部分内容参考《Android源码设计模式解析与实战》一书~~ 一. 定义: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 也就是说,单例要满足3点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。(构造函数私有化,防止...

hk121的博客 264

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 设计模式入门到精通之一:单例模式(Singleton Pattern)

设计模式项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,代码设计模式&框架设计实现不妥之处,请帮忙指正),谢谢! 单例模式(Singleton Pattern) 一、概念及技术背景 Ensure a class has only one instance, and pro...

caobaokang的专栏 1050

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android设计模式-单例模式(Singleton Pattern)

饿汉式 public class Singleton { //静态方法调用的变量必须是静态的 private static Singleton instance = new Singleton(); //必须定义一个静态方法获得该单例 public static Singleton getInstance() { return instance;

原氢的专栏 1181

Android设计模式之单例模式(singleton pattern)

饿汉式: //只有内部类可以为static。 public class SingIn{ //在自己内部定义自己的一个实例,只供内部调用 private static final SingIn instance = new SingIn(); private SingIn(){ } //这里提供了一个供外部访问本class的静态方法,可以直接访问 pu...

m0_38048084的博客 187

Android设计模式解析(二)单例模式(Singleton Pattern)

单例显而易见也就是单独、唯一的意思,即一个类只有一个实例,比较简单、常用的一种设计模式

1433

Android设计模式之单例模式 Singleton

单例模式是设计模式中最简单的一种, 由于它没有设计模式中各种对象之间的抽象关系, 所以有人不认为它是一种模式, 而是一种实现技巧. 单例模式就像字面的意思一样, 创建全局唯一的一个实例, 提供给外部使用. 要达到这几点要求就要满足三点: 私有构造函数(防止被别人实例化), 静态私有自身对象(用来提供唯一实例), 静态公有的getInstance方法(用来创建和获取唯一实例对象). 优缺点: 单例...

Jesse的专栏 1万+

Android设计模式之单例模式Singleton

单例模式(Singleton)是使用最广的一种模式,在初学时必须要掌握并且运用的设计模式之一。 所谓单例,即是要创建唯一的实例。 在java程序开发中,我们会使用new构造的方法去创建对象实例,但是对于使用频繁的一些常用工具类,每次使用时都创建新的实例对象,就会造成大量的内存占用,从而产生垃圾。对于java程序而言,内存垃圾就是java程序的拖油瓶。

小明的码路-博客 749

Android开发中常见的设计模式深入浅出——单例模式singleton

已经转做Android半个月了 设计模式还不怎么了解 从今天起就从最简单的单例模式开始吧! ###说得不对的还请各位来battle (粗体是重点,对象 和 实例 是一个意思) 单例模式singleton 顾名思义单例模式就是只有一个实例 如:需要班长统计学生信息的时候(需求) 不用每次找班长的时候都进行选拔(进行实例化) 在整个大学期间(程序运行期间)只选拔一次(实例化一次)就够了 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 优点 显而易见,在移动端开发过程中 有一些实例化起来比

qq_42945340的博客 2467

android创建单例模式,Android单例模式Singleton简单实例设计模式解析.pdf

Android 单单例例模模式式 Singleton 简简单单实实例例设设计计模模式式解解析析单单例例模模式式 Singleton 简简单单实实例例设设计计模模式式解解析析前言今天我来全面总结一下A ndroid开发中最常用的设计模式 - 单例模式。关 设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式”目录1. 引引入入1.1 解决的是什么问题之前说过,设计模式 = 某类特定问题的解...

weixin_30045055的博客 168

Android设计模式-单例模式(Singleton)

1. 关于单例模式 单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。 比如在android实际APP 开发中用到的 账号信息对象管理,数据库对象(SQLiteOpenHelper)等都会用到单例模式。下面针对一些例子分析一下我们在开发过程中应用单例模式需要注意的点。 1.1 作用 保证一个类仅有一个实例,并提供一个访问它的全局访问点。

Jokey 937

Android设计模式——单例模式(Singleton)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 1 packa...

weixin_30500289的博客 121

Android开发-设计模式-单例模式(Singleton)

单例模式是对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

City_Coder的博客 712
上一篇: 实测Eclipse连接小米2S调试问题
下一篇: 在ActionBar添加刷新Loading状态
tongcpp
博客等级 码龄15年 32粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值