单例模式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;
    }
}

 区别之懒汉模式和饿汉模式

饿汉模式特点:类加载的时候比较慢,但运行时获取对象的速度比较快,线程安全

懒汉模式特点:类加载的时候比较快,但运行时获取对象的速度比较慢,线程不安全

posted @ 2015-01-28 11:57  BigShui  阅读(140)  评论(0编辑  收藏  举报