------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