单例模式singleton
/*
* 单例模式singletom
* 应用场合:有些对象只要一个就足够了,比如老婆
* 作用:保证整个应用程序中的实例只有一个
* 类型:恶汉模型,懒汉模型
*/
//单例模式之懒汉模式
public class singleton {
//1:构造方法私有化,不允许外界直接创建对象
private singleton(){
}
//2:创建类的唯一实例
static singleton instance1=new singleton();//法一
//提供一个获取实例的方法
//恶汉模式,类加载的时候创建这个实例,没用之前先创建,叫恶汉
private static singleton instance2=new singleton();//封装
public static singleton getInstance()
{
return instance2;
}
}
public class text { public static void main(String[] args) { //new singleton(); //有默认构造方法就能创建多个实例,所以我们把构造方法私有化 singleton s1=singleton.instance1; singleton s2=singleton.instance1; if (s1==s2) { System.out.println("s1和s2是同一个实例"); } else { System.out.println("s1和s2不是同一个实例"); } System.out.println("-----以上为法一-----"); singleton s3=singleton.getInstance(); singleton s4=singleton.getInstance(); if (s3==s4) { System.out.println("s3和s4是同一个实例"); } else { System.out.println("s3和s4不是同一个实例"); } System.out.println("-----以上为法二-----"); /* * s1和s2是同一个实例 -----以上为法一----- s3和s4是同一个实例 -----以上为法二----- */ } }
public class Test {
public static void main(String[] args) {
singleton2 s5=singleton2.getInstance();
singleton2 s6=singleton2.getInstance();
if (s5==s6) {
System.out.println("s5和s6是同一个实例");
}
else {
System.out.println("s5和s6不是同一个实例");
}
}
//懒汉模式 public class singleton2 { private singleton2(){ } //声明类的实例,没用实例化 private static singleton2 intance3; public static singleton2 getInstance() { if (intance3==null) { intance3=new singleton2(); //第一次加载时候创建,以后直接用 } return intance3; } }
区别之懒汉模式和饿汉模式
饿汉模式特点:类加载的时候比较慢,但运行时获取对象的速度比较快,线程安全
懒汉模式特点:类加载的时候比较快,但运行时获取对象的速度比较慢,线程不安全

浙公网安备 33010602011771号