单例设计模式
2015-08-27 09:20
176 查看
一、概述
1.目的:保证一个类在内存中的对象只有一个。
2.思想:
(1)不让其他程序创建该类对象;
(2)在本类中创建一个本类对象;
(3)对外提供方法,让其他程序获取这个对象。
3.代码体现:
(1)私有化构造函数;
(2)创建私有并静态的本类对象;
(3)定义公有并静态的方法,返回该对象。
二、饿汉式
class Single{
private Single(){}
//私有化构造函数。
private static Single s=new Single();
//创建私有并静态的本类对象。
public static Single getInstance(){
//定义公有并静态的方法,返回该对象。
return s;
}
}
三、懒汉式(也叫做对象的延时加载)
class Single{
private Single(){}
private static Single s=null;
public static Single getInstance(){
if(s==null)
s=new Single();
return s;
}
}
当多个线程访问该类时,有可能会产生多个对象。对于这种情况有以下两种种解决方案。
第一种解决方案:同步方法
public static synchronized Single getInstance(){
if(s==null)
s=new Single();
return s;
}
在getInstance()方法前面加上synchronized关键字,但每次调用此方法都会对其进行判断,效率较低;
第二种解决方案:同步代码块
public static synchronized Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
有了对象之后就不会再判断锁,所以效率不会较低。
定义单例时建议使用饿汉式。
1.目的:保证一个类在内存中的对象只有一个。
2.思想:
(1)不让其他程序创建该类对象;
(2)在本类中创建一个本类对象;
(3)对外提供方法,让其他程序获取这个对象。
3.代码体现:
(1)私有化构造函数;
(2)创建私有并静态的本类对象;
(3)定义公有并静态的方法,返回该对象。
二、饿汉式
class Single{
private Single(){}
//私有化构造函数。
private static Single s=new Single();
//创建私有并静态的本类对象。
public static Single getInstance(){
//定义公有并静态的方法,返回该对象。
return s;
}
}
三、懒汉式(也叫做对象的延时加载)
class Single{
private Single(){}
private static Single s=null;
public static Single getInstance(){
if(s==null)
s=new Single();
return s;
}
}
当多个线程访问该类时,有可能会产生多个对象。对于这种情况有以下两种种解决方案。
第一种解决方案:同步方法
public static synchronized Single getInstance(){
if(s==null)
s=new Single();
return s;
}
在getInstance()方法前面加上synchronized关键字,但每次调用此方法都会对其进行判断,效率较低;
第二种解决方案:同步代码块
public static synchronized Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
有了对象之后就不会再判断锁,所以效率不会较低。
定义单例时建议使用饿汉式。
相关文章推荐
- HDU 2767 强连通分量
- JVM学习笔记
- Eclipse中最有用的快捷键组合
- Android学习—RecyclerView的使用(1)
- CentOS安装memcached及配置php的memcache扩展
- 设计解析-封面/banner
- Java六功能开发者应避免
- 为什么要圆通?
- MySQL字符集知识点
- HTML5 CSS3:诱人的3D旋转木马效果相册实例
- button以及Imagebutton的使用
- 常见的几种RuntimeException
- STM32学习笔记(7):USART串口的使用
- iOS-浅谈runtime运行时机制02-runtime简单使用
- VS2010开发环境最佳字体及配色[转]
- 在.NET使用JSON作为数据交换格式
- static_cast与dynamic_cast转换
- eclipse异常关闭后工作空间android项目不见了的解决办法
- Java多线程 -- 条件变量
- IO