------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、概述
1.设计模式
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件的时候,建议配置文件封装成对象,会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
2.如何保证对象唯一性呢?
思想:
1.不让其他程序创建该对象
2.在本类中创建一个本类对象
3.对外提供方法,让其他程序获取这个对象
步骤:
1.将构造函数私有化
2.就在类中创建一个本类对象
3.定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。
二:实现
//饿汉式
public class SingleDemo{
public static void main(String args[]){
Single ss = Single.getinstance();
}
}
class Single{
private Single(){}//私有化构造函数
private static Single s = new Single();//创建私有并静态本类对象
public static Single getinstance(){//定义公有并静态的方法,返回该对象
return s;
}
}
//懒汉式
public class SingleDemo{
public static void main(String args[]){
Single ss = Single.getinstance();
}
}
class Single{
private Single(){}
private static Single s = null;//先初始化为null
public static Single getinstance(){
if(s == null){ //判断是否为空
s = new Single();//创建新类
return s;
}
}
懒汉式会出现问题,就是在前一个对象进入后,cpu中断了对他的操作,以后的就进不去
解决办法:
class Single{
private Single(){}
private static Single s = null;//先初始化为null
public static synchronized Single getinstance(){//用synchronized上锁
if(s == null){ //判断是否为空
s = new Single();//创建新类
return s;
}
}//但这样执行效率很差
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)//进行双重判断
s = new Single();
}
}
return s;
}
}
原文地址:http://blog.csdn.net/orangeisnotapple/article/details/41419015