设计模式---单例模式
来源:互联网 发布:进驻淘宝商城的条件 编辑:程序博客网 时间:2024/06/02 04:19
单例模式是比较重要的一种模式,其主要作用是系统中仅存在一个类的唯一实例。维基百科上面的说明比较不错:
單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。許多時候整個系統只需要擁有一個的全局對象,這樣有利於我們協調系統整體的行為。比如在某個伺服器程序中,該伺服器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,然後服務進程中的其他對象再通過這個單例對象獲取這些配置信息。這種方式簡化了在複雜環境下的配置管理。
还有一点也需要使用单例模式,就是针对系统比较重要的资源,比如数据库连接,网络IO连接等等。
原理:使用私有的构造函数,在该类的接口中构造一个对象。其他程序使用时,通过接口调用来获取单一类的实例即可。以下是实现方式:
1 基本实现:该实现在单线程环境中是可以使用的,但是到了多线程环境,其实很难保证该实例的单一。
package com.dev.design.singleton;public class Service {private Service(){}private static Service service = null;public static Service getServiceInstance(){return service == null?new Service():service;}}2 多线程环境实现:使用这种方式,在多线程环境中也可以保证实例的单一,但是只要使用这种方式,就会有同步,这样的话,在性能方面会有优化空间。
package com.dev.design.singleton;public class Service2 {private Service2(){}private static Service2 service = null;public static Service2 getServiceInstance(){synchronized(service){return service == null ? new Service2():service;}}}3 Double-Checked Locking :双重检查机制,这种实现方式就是目前最普遍的实现方式了。
package com.dev.design.singleton;public class Service3 {private Service3(){}private static Service3 service = null;public static Service3 getServiceInstance(){if(service == null){synchronized(service){if(service == null){service = new Service3();}}}return service;}}
目前先记录到这里,单例模式很值得研究,基本上每个系统都会使用到单例模式,还有该模式的性能研究,使用的研究等。
说一下,为什么是需要静态变量来持有单例呢?
我的理解:如果使用非静态的变量来持有,这样的话,很可能会被java语言的垃圾收集器收集了,等到下一次使用的时候,又要重新构造了。这样性能消耗太大,我想正是因为这个原因,才会考虑使用静态变量了。
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- SQL SERVER 本地查询更新操作远程数据库
- 非主流家族繁体字网名:/╱●銘秂娯樂、
- hdu 2087 剪花布条(KMP)
- HTML5方法速查
- Teradata和Exadata
- 设计模式---单例模式
- hdu3473 划分树
- UVa152 Tree's a Crowd
- hdu 3746 Cyclic Nacklace(KMP)
- JS内置时间类
- linux命令学习——单引号(‘’)、双引号(“”)、小引号(``)总结
- Web Service实际开发
- ubuntu tftp服务器
- OK6410启动代码(1)