package cn.china;



public class Single {
    public static void main(String[]args){
//        S singles=S.getInstance();
//        S singless=S.getInstance();
//        System.out.println(singles==singless);
        Test tt=Test.getInstance();
        Test ttt=Test.getInstance();
        tt.setNum(10);
        ttt.setNum(20);
        System.out.println(tt.getNum());
        System.out.println(ttt.getNum());
    }
/**
 * 单类设计模式:
 * 解决的问题,就是可以保证一个类在内存中的对象唯一性
 *如何确保对象唯一性呢?
 *1、不允许其他程序用new创建该类对象。
 *2、在该类中创建一个本类实例。
 *3、对外提供一个方法让其他程序可以获取该对象
 *步骤:
 *1、私有化该类构造函数
 *2、通过new在本类中创建一个本类对象
 *3、定义一个共有方法,将创建的对象返回。 */
    
}
//饿汉式
class S{
    private static S single=new S();
    private S(){}
    public static S getInstance(){
        return single;
    }
}
class Test{
    private int num;
    private static Test t=new Test();
    private Test(){}
    public static Test getInstance(){
        return t;
    }
    public void setNum(int num){
        this.num=num;
    }
    public int getNum(){
        return this.num;
    }
}
//懒汉式
class single2{//类加载进来没有对象,只有调用了getInstance方法时,才会创建对象。
    private static single2 s=null;
    private single2(){}
    public static single2 getInstance(){
        if(s==null)
            s=new single2();
        return s;
    }
}