单例模式
目标
使JVM中最多只有一个该类的实例,以节省内存。缺点:只能建一个该类的实例。
实现
具体实现思路:
1构造方法私有化//故在外面不能new很多次
2对外提供一个公开的静态的类方法,获取类对象//故外面可以得到类
3提供一个当前类类型的静态变量。//方便只new一次
两种实现方式:
1饿汉模式:在未调用方法时就创建了类的实例。
2懒汉模式:在调用方法时才创建类的实例。较优,因为不调用方法就创建了类的实例无用。
相关知识
1静态变量区别于成员变量,在类内可以直接调用(不用有对象this.来调用),静态变量只在类加载时初始化且只初始化一次。
2静态方法区别于成员方法,不用先创建类的实例,可以直接用类名调用。
3如果==
两边是普通类型则比较的是值,如果==
两边是引用类型,则比较的是内存地址。
4使用测试类进行测试
代码
1饿汉模式
public class Singleton {
static Singleton s=new Singleton();
private Singleton() {};
public static Singleton getSingleton() {
return s;
}
}
2懒汉模式
public class Singleton {
static Singleton s=null;
private Singleton() {};
public static Singleton getSingleton() {
if(s==null) {
s=new Singleton();
}
return s;
}
}
测试类
public class SingleTonTest {
public static void main(String args[]) {
Singleton s1=Singleton.getSingleton();
Singleton s2=Singleton.getSingleton();
System.out.println(s1==s2);
}
}
测试结果
true