2011-5-6漫谈设计模式(单例模式)

1.最简单的单例模式:

package com.singleton;
/**这是最简单的单例模式,实现的效果的是在一个jvm中只有一个实例
* 类在加载的时候静态变量只会初始化一次。
* 1.这种模式的问题在于不能够延迟加载,当SimpleSingleton加载到内存的时候
* 实例就会自动生成,不能够延迟加载
*
*/
public class SimpleSingleton {
private SimpleSingleton(){};
private static SimpleSingleton instance=new SimpleSingleton();
public static SimpleSingleton getInstance()
{
return instance;
}
public static void main(String[] args)
{
SimpleSingleton s1=SimpleSingleton.getInstance();
SimpleSingleton s2=SimpleSingleton.getInstance();
System.out.println(s1==s1);
System.out.println(s1.equals(s2));

}

}


2.线程不安全的单例模式

package com.singleton;
/**
* 这里实现了延迟加载的目的,但是却不是线程安全的
* 原因主要在于两个线程同时到判断是否为null的时候
* 可能一起创建实例
* @author Administrator
*
*/
public class UnThreadSingleton {
private static UnThreadSingleton instance;
public static UnThreadSingleton getInstance()
{
if(instance==null)
{
instance=new UnThreadSingleton();
}
return instance;
}

public static void main(String[] args)
{
UnThreadSingleton s1=UnThreadSingleton.getInstance();
UnThreadSingleton s2=UnThreadSingleton.getInstance();
System.out.println(s1==s2);
}
}


3.线程安全的单例模式

package com.singleton;

public class ThreadSingleton {
public static ThreadSingleton instance;
public static ThreadSingleton getInstance()
{
if(instance==null)
synchronized(ThreadSingleton.class){
if(instance==null)
{
instance=new ThreadSingleton();
}
}
return instance;
}
public static void main(String[] args)
{
ThreadSingleton t1=ThreadSingleton.getInstance();
ThreadSingleton t2=ThreadSingleton.getInstance();
System.out.println(t1==t2);

}

}


4.内部类单例模式

package com.singleton;

public class LazyLoadSingleton {
private static class LazyHolder
{
private static LazyLoadSingleton singletonInstance=new LazyLoadSingleton();
}
public static LazyLoadSingleton getInstance()
{
return LazyHolder.singletonInstance;
}
public static void main(String[] args)
{
LazyLoadSingleton l1=LazyLoadSingleton.getInstance();
LazyLoadSingleton l2=LazyLoadSingleton.getInstance();
System.out.println(l1==l2);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值