设计模式学习—单列模式
来源:互联网 发布:济南用友软件代理商 编辑:程序博客网 时间:2024/05/16 07:11
- 动机:对于系统来说,某些类只需要有一个实例或必需只能有一个实例(a.降低资源消耗;b.减少对象创建消耗的时间;c.减轻GC压力)
- 结构:
3.优缺点
- 优点:
- 提供了对惟一实例的受控访问。
- 节省系统资源
- 缺点:
- 由于单例模式中没有抽象层,因此单例类的扩展有很大的困难
- 单例类的职责过重
- 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出
- 优点:
4.用例:任务管理器、ID生成器、计时工具、Runtime
5.代码:
package cn.com.tnjun.singlerow;
/**
* 饿汉单列模式(若单列创建比较慢会导致系统启动变慢)
* @author ilmlife(ilmlife @163.com)
* <pre>2013 -12- 15下午10:47:15</pre>
*/
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){
//same function as singlerow
}
public static Singleton getInstance(){
return singleton ;
}
}
/**
* 懒汉单列模式(懒加载方式:在获取实例时,竞争越大,耗时越多。且只有第一次需要同步)
* @author ilmlife(ilmlife @163.com)
* <pre>2013 - 12- 15下午10:47:15 </pre>
*/
public class Singlerow {
private static Singlerow singlerow;
private Singlerow(){
//防止被直接new实例化
}
/**
* synchronized防止线程产生多个实例
* @return Singlerow
*/
public static synchronized Singlerow getInstance(){
if(singlerow == null){
singlerow = new Singlerow();
}
return singlerow ;
}
}
/**
* 双重检查锁(参见单例模式(双重检查锁之无序写入))
* @author ilmlife(ilmlife @163.com)
* <pre>2013 - 12- 15下午10:47:15 </pre>
*/
public class Singlerow {
private static Singlerow singlerow;
private Singlerow(){
//防止被直接new实例化
}
/**
* synchronized防止线程产生多个实例
* @return Singlerow
*/
public static Singlerow getInstance(){
if(singlerow == null){
synchronized (Singlerow.class) {
if(singlerow == null){
singlerow = new Singlerow();
}
}
}
return singlerow ;
}
}
/**
* 内部类延迟加载机制(使用内部类避免使用同步关键字)
*@author tnjun(tnjun123456@163.com)
* <pre>2013 -11- 9</pre>
*/
public class SingleInner {
private SingleInner(){}
private static class SingleHolder{
private static SingleInner instance = new SingleInner();
}
public static SingleInner getInstance(){
return SingleHolder.instance;
}
}
0 0
- 设计模式学习—单列模式
- 学习设计模式-单列模式
- 设计模式--单列模式
- 设计模式-单列模式
- 设计模式——单列设计模式
- 设计模式——单列模式 Singleton
- Java设计模式——单列模式
- java设计模式—单列模式
- 单列模式设计
- 设计模式之单列
- 单列设计模式
- android 设计模式:单列
- java单列设计模式
- 单列设计模式
- php单列设计模式
- 单列设计模式
- 温习设计模式单列
- 浅谈单列设计模式
- struts1登陆
- 我一向觉得做软件的人不像我们做硬件的人大气,果然这样
- photoshop cs6破解补丁
- WinCE文件目录定制及内存调整
- Android屏幕适配
- 设计模式学习—单列模式
- 2种方式实现ListView中中每一项下的任意控件的点击事件
- 浅谈网站优化时robots的写法
- WinCE系统字体的设置
- 字符串与字符数组初始化及长度计算
- 分区数据恢复之ubuntu13.10格式化整个硬盘
- AS3.0 NaN、null、undefined 三者之间的区别
- 在WinCE5.0和WinCE6.0下,编译选项介绍
- Qt中文乱码解决方法