您的位置:首页 > 其它

设计模式——单例模式

2016-07-06 15:40 225 查看
单例模式大概是接触的最早的设计模式了,也是我们日常中常用的模式之一。个人的理解,单例类就是只能有一个实例,而这个实例是它自己创建的。

单例模式有很多种表达方式,此处就写两种常用的表达方式,懒汉单例和饿汉单例。

懒汉,懒汉呢也不是不干活,知识比较懒而已,要别人拿着鞭子打他,他才会干活,那个拿鞭子的人当然就是你了。
就是说只有你调用getInstance()这个方法的时候这个类才会去实例化。

public class SingleTon {
/*
* 懒汉单例
*/
private static SingleTon instance =null;
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}

}

那么如何让线程安全呢?三种方法

1.getInstance()方法加同步,

public static
synchronized SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}

2.双重锁

public static SingleTon getInstance(){
if (instance==null) {

synchronized (Singleton.class){

if(instance==null){

instance
= new SingleTon();

}

}
}
return instance;
}

3.静态内部类

public class SingleTon {
private static class Test(){
private static final  SingleTon singleton = new SingleTon();

}
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){

return Test.singleton;
}

}

饿汉,顾名思义就是很饥渴的汉子嘛,很饥渴汉子想干嘛呢,当然想立马能有一口水滋润他内心那荒芜的 沙漠。程序中同样的,就是立马就实例化这个类而不要等到你去主动触动方法来实例化。下面来看代码:

/**

 * 饿汉单例,在创建的时候就已经创建好一个静态的对像供系统使用,所以天生线程安全

 * @author sunShine

 *

 */

public class Singleton1 {
private Singleton1(){}

private static final Singleton1 instance = new  Singleton1();
//静态工厂方法
public static final Singleton1 getInstance(){

return instance;
}

}

这就是单利模式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 singleton