设计模式(design pattern)-单例模式(singleton pattern)

设计模式最近感觉非常重要,为自己以后复习做下笔记

package com.yongan.test;
/**
 * 此文是观 圣思园视频教程(张龙老师),自己动手写一个单例模式,只供学习参考.
 */

/**
 * 
 * @author huwenbin
 * @time 2012-9-26 下午05:07:23
 */

public class SingletonPatternTest {

	public static void main(String[] args) {
		SingletonPattern1 singleton1 = SingletonPattern1.getInstance();
		SingletonPattern1 singleton2 = SingletonPattern1.getInstance();
		
		System.out.println(singleton1 == singleton2);
		
		SingletonPattern2 singleton3 = SingletonPattern2.getInstance();
		SingletonPattern2 singleton4 = SingletonPattern2.getInstance();
		
		System.out.println(singleton3 == singleton4);
	}

}

/**
 * 单例1 (推荐)
 */
class SingletonPattern1{
	private static SingletonPattern1 singleton1 = new SingletonPattern1();
	
	/**
	 * 默认构造函数为private 保证类外部不能实例化(new SingletonPattern1())
	 */
	private SingletonPattern1(){
		
	}
	
	/**
	 * 通过类方法返回实例
	 * @return
	 */
	public static SingletonPattern1 getInstance(){
		return singleton1;
	}

}

/**
 * 单例2
 */
class SingletonPattern2{
	private static SingletonPattern2 singleton2;
	
	/**
	 * 默认构造函数为private 保证类外部不能实例化(new SingletonPattern2())
	 */
	private SingletonPattern2(){
		
	}
	
	/**
	 * 通过类方法返回实例
	 * @return
	 */
	public static SingletonPattern2 getInstance(){
		if(singleton2 == null){
			singleton2 = new SingletonPattern2();
		}
		return singleton2;
	}

}

两种单例方法输出的都是 true  因此单例模式,实现了单例.

但此单例2,在多线程时可能会出现不是单例的情况,比如

if(singleton2 == null){
            singleton2 = new SingletonPattern2();
        }

当第一个线程执行完if 判断后,进入语句时,此线程时间片结束,第二个线程执行时又可以生成一个实例......


因此此方法要加锁等


单例模式所学内容主要这些!

以上纯属个人观点,如有新想法,我会随时更新单例模式的

欢迎大家斧正,谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值