说明
- 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
角色
代码实现
- 最好的还是第四种方式,实现了懒加载,又不需要加锁,1跟3都是立即加载,2是需要加锁
public class SingleClassOne {
public static SingleClassOne singleClassOne = new SingleClassOne();
private SingleClassOne(){
System.out.println("构造方法1");
}
public static void test(){
System.out.println("测试方法");
}
}
public class SingleClassTwo {
private static SingleClassTwo singleClassTwo;
private SingleClassTwo(){
System.out.println("构造方法2");
}
public static SingleClassTwo newInstance(){
if(singleClassTwo == null){
synchronized (SingleClassTwo.class){
if(singleClassTwo == null){
singleClassTwo = new SingleClassTwo();
}
}
}
return singleClassTwo;
}
public static void test(){
System.out.println("测试方法");
}
}
public class SingleClassThree {
private static SingleClassThree singleClassThree;
static {
System.out.println("静态代码块");
singleClassThree = new SingleClassThree();
}
private SingleClassThree(){
System.out.println("构造方法3");
}
public static void test(){
System.out.println("测试方法");
}
public static SingleClassThree getInstance(){
return singleClassThree;
}
}
public class SingleClassFour {
private static class SingleClassNew{
private static SingleClassFour singleClassFour = new SingleClassFour();
}
private SingleClassFour(){
System.out.println("构造方法4");
}
public static SingleClassFour getInstance(){
return SingleClassNew.singleClassFour;
}
public static void test(){
System.out.println("测试方法");
}
}