关闭

java单例设计模式详解

516人阅读 评论(0) 收藏 举报
/*
 * 单例设计模式:
 * 避免其它程序过多建立该类对象,
 * 先禁止其他程序建立该类对象。
 * 还要让其他程序访问到该类对象,
 * 在本类中自己定义一个对象。
 * 方便其他程序可以访问,
 * 对外提供访问方式
 * 
 * 体现:
 * 构造函数私有化
 * 在类中创建一个本类对象
 * 提供获取该类对象方法
 */

/*
 * 这种方式叫做饿汉式
 * Singleton类一进内存,就已经创建好了对象
 */

public class Singleton {

	private Singleton() {

	}

	// 这里必须是私有的,要不然外面的程序可以直接访问这个属性了
	private static Singleton s = new Singleton();

	public Singleton getInstance() {
		return s;
	}

}

/*
 * 这种方式叫懒汉式
 * Singleton一进内存,对象还没存在
 * 只有调用了getInstance方法才建立对象
 * 延迟加载
 */
public class Singleton {

	private Singleton() {

	}

	// 这里必须是私有的,要不然外面的程序可以直接访问这个属性了
	private static Singleton s = null;

	public Singleton getInstance() {
		if (s == null) {
			s = new Singleton();
		}
		return s;
	}

}

/*
 * 饿汉式,简单,安全,懒汉式存在缺陷, 因为如果A、B同时调用懒汉式的getInstance方法, A调用时,执行到s==null不执行了,
 * cpu去执行B的getInstance方法去了, 执行到s==null的时候也不执行了,cpu又去执行A了,
 * 然后Anew了个对象赋值给了s,返回了。然后cpu又去执行B, B也new了个对象赋值给s,把A里的s覆盖掉了!,也返回了,
 * 这时候就不是同一对象了(典型的线程同步问题, 解决方案是在getInstance方法上加上synchronized,
 * 把s对象锁起来就好了)加上锁程序效率就低了 最终解决方案:双重判断、减少读锁次数
 */
/*
 * public Singleton getInstance() { if(s == null) { synchronized
 * (Singleton.class) { if(s == null) { s = new Singleton(); } } } return s; }
 */

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:118421次
    • 积分:2537
    • 等级:
    • 排名:第14480名
    • 原创:58篇
    • 转载:20篇
    • 译文:81篇
    • 评论:1条
    文章分类