java-android设计模式学习笔记(1):单例模式-编程开发技术

java-android设计模式学习笔记(1):单例模式-编程开发技术

ID:30777614

大小:133.50 KB

页数:10页

时间:2019-01-03

java-android设计模式学习笔记(1):单例模式-编程开发技术_第1页
java-android设计模式学习笔记(1):单例模式-编程开发技术_第2页
java-android设计模式学习笔记(1):单例模式-编程开发技术_第3页
java-android设计模式学习笔记(1):单例模式-编程开发技术_第4页
java-android设计模式学习笔记(1):单例模式-编程开发技术_第5页
资源描述:

《java-android设计模式学习笔记(1):单例模式-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java/android设计模式学习笔记(1):单例模式-编程开发技术java/android设计模式学习笔记(1):单例模式原文岀处:Shawn_Dut前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴T_T),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的吋候也会有一些坑。PS:对技术感兴趣的同鞋加群544645972一起交流。设计模式总目录java/android设计模式学习笔记口录特点确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式的使用很广泛,比

2、如:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置、和注册表(registry)的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象等,这些类的对象只能有一个实例,如果制造出多个实例,就会导致很多问题的产生,程序的行为异常,资源使用过量,或者不一致的结果等,所以单例模式最主要的特点:1.构造函数不对外开放,一般为private;2.通过一个静态方法或者枚举返回单例类对象;3.确保单例类的对彖有且只有一个,尤其是在多线程的坏境下;4.确保单例类对象在反序列化时不会重新构建对象。通过将单例类构造函数私冇化,使得客户端不能通过new的形式手动构造单

3、例类的对彖。单例类会暴露一个共有静态方法,客户端需要条用这个静态方法获取到单-例类的唯一对象,在获取到这个单例对象的过程屮需要确保线程安全,即在多线程环境下构造单例类的对象也是冇且只冇一个,这是单例模式较关键的一个地方。o主要优点单例模式的主要优点如下:1.单例模式提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。2.山于在系统内存中只存在一个対象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对彖单例模式无疑可以提鬲系统的性能。3.允许可变数目的实例。基于单例模式我们可以进行扩展,使用与单例控制相似的方法來获得指定个

4、数的对象实例,既节省系统资源,乂解决了单例对象共享过多有损性能的问题。•主要缺点1.由于单例模式中没有抽彖层,因此单例类的扩展有很大的困难。2.单例类的职责过重,在一定程度上违背了“单一职责原则二因为单例类既充当了工厂角色,提供了工厂方法,同时乂充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。3.现在很多面向对彖语言Java.C#)的运行环境都提供了自动垃圾回收的技术,因此,如果实例化的共亨对象长时间不被利用,系统会认为它是垃圾,会自动销毁并冋收资源,下次利用时又将重新实例化,这将导致共享的单例对象状态的丢火。4.单例对象如果持有Context

5、,那么很容易引发内存泄漏,此时需耍注意传递给单例对象的Context最好是ApplicationContextoUML类图类图很简单,Singleton类有一个static的instance对象,类型为Singlcton,构造函数为private,提供一个getlnstancc()的静态函数,返回刚才的instance对象,在该函数屮进行初始化操作。示例与源码单例模式的写法很多,总结一下:lazyinitialization,thread-unsafety(懒汉法,线程不安全)延迟初始化,一般很多人称为懒汉法,写法一目了然,在需耍使用的时候去调用getlnstanceO函

6、数去获取Singleton的唯一静态对象,如果为空,就会去做一个额外的初始化操作。publicclassSingleton{privatestaticSingletoninstanee=null;privateSingleton(){}publicstaticSingletongetlnstance(){if(instance二二null)instance=newSingleton();returninstanee;需要注意的是这种写法在多线程操作屮是不安全的,后果是可能会产生多个Singleton对象,比如两个线程同吋执行getlnstanceO函数II寸,然后同吋执行

7、到new操作时,最后很有可能会创建两个不同的对象。lazyinitialization,thread-safety,double-checked(懒汉法,线程安全)需要做到线程安全,就需要确保任意时刻只能有口仅有一个线程能够执行newSingleton对象的操作,所以可以在getlnstance()函数上加上synchronized关键字,类似于:publicstaticsynchronizedSingletongetlnstance(){if(singleton二二null)instance=newSingleton();r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。