设计模式之单例模式
2016-03-19 11:04
405 查看
基本概念
单例模式指的是:对于某一个类,整个程序中值存在一个该类的实例对象。常见的比如数据库连接对象等。
代码示例,单例模式的几种写法及优劣
以上这种写法,通过synchronized关键字,在创建实例对象时,进行双重校验,确保了对象的唯一性。
当然,也可以在方法的定义上加synchrozied关键字,只是多了不必要的同步,每次getInstance()时,都需要加锁解锁操作。
上面这样的写法是饱汉式,即在声明属性的时候已经创建了实例对象,后续程序中只需要调用获取即可,但是这种方式并没有达到lazy loader的效果。
单例模式指的是:对于某一个类,整个程序中值存在一个该类的实例对象。常见的比如数据库连接对象等。
代码示例,单例模式的几种写法及优劣
/** * 饿汉式写法,多线程下不能保证对象的确定性 **/ public class SingletonHungryUnsec { private static SingletonHungryUnsec instance; private SingletonHungryUnsec() { } /** * 饿汉式,且线程不安全 * @return instancce */ public static SingletonHungryUnsec getInstance (){ if (null == instance) { instance = new SingletonHungryUnsec(); } return instance; } } 实际操作时,不推荐这样的写法。
public class SingletonHungrySec { private static SingletonHungrySec instance; private SingletonHungrySec() { } /*** * 饿汉式,线程安全型 * @return instance */ public static SingletonHungrySec getInstance () { if (null == instance) { synchronized (SingletonHungrySec.class) { if (null == instance) { instance = new SingletonHungrySec(); } } } return instance; } }
以上这种写法,通过synchronized关键字,在创建实例对象时,进行双重校验,确保了对象的唯一性。
当然,也可以在方法的定义上加synchrozied关键字,只是多了不必要的同步,每次getInstance()时,都需要加锁解锁操作。
public class SingletonFull { private static final SingletonFull instance = new SingletonFull(); private SingletonFull() { } public static SingletonFull getInstance (){ return instance; } }
上面这样的写法是饱汉式,即在声明属性的时候已经创建了实例对象,后续程序中只需要调用获取即可,但是这种方式并没有达到lazy loader的效果。
相关文章推荐
- IOS 支付宝-五福简单框架实现-线性滚动(UICollectionView)
- numpy.mean和numpy.random.multivariate_normal(依据均值和协方差生成数据,提醒:计算协方差别忘了转置)
- 命令行无法输入中文
- 蓝桥杯数独游戏——C语言版
- POJ 1753 Flip Game
- CodeForces 217A Ice Skating(DFS)
- Linux 内存不足
- Linux内核分析实验四----
- 1oracle 自增长 2Oracle Sequence中Cache与NoCache的区别
- usrlocallib usrlib的区别
- Web挖掘的综述
- iOS—NSURLConnection基本使用
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
- git常用指令
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
- 内存管理之引用计数
- 深入理解Java虚拟机笔记---判断对象是否存活
- Ajax and php 1.4
- HDU1166-敌兵布阵,线段数模板题~~
- 第三周项目(3):本月有几天