您的位置:首页 > 其它

Singleton

2016-07-14 23:11 211 查看

问题:编写一个Singleton类

 简单的方式

package cn.changb.singleton;

/**
* 简单的方式:弊端是在并发执行时,14行处可能存在多个实例
*/
public class SingletonDemo1 {
private static SingletonDemo1 INSTANCE;

private SingletonDemo1() {
}

public static SingletonDemo1 getInstance() {
if (INSTANCE == null) {
INSTANCE = new SingletonDemo1();
}
return INSTANCE;
}
}


 公共域方式

package cn.changb.singleton;

/**
* 公共域方式:简单,不存在并发出现多实例的问题,但弊端是返回实例时增加一些额外的逻辑
*/
public class SingletonDemo2 {
public static final SingletonDemo2 INSTANCE = new SingletonDemo2();

private SingletonDemo2() {
}
}


 工厂化方式

package cn.changb.singleton;

/**
* 工厂化方式:可以在实例化过程中(11行处)添加逻辑
*/
public class SingletonDemo3 {
private static final SingletonDemo3 INSTANCE = new SingletonDemo3();

private SingletonDemo3() {
}

public static SingletonDemo3 getInstance() {
return INSTANCE;
}
}


 枚举类方式

package cn.changb.singleton;

/**
* 枚举类方式:最佳实践,推荐方式
*
* 不存在多个实例问题、反序列化问题!
*/
public enum SingletonDemo4 {
INSTANCE;
}


 SingletonTest

package cn.changb.singleton;

public class SingletonTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());
System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());

System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);
System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);

System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());
System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());

System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: