饿汉式单例模式

1、创建单例模式的第一步是将类的构造方法私有,这样其他类不能直接创建这个类的对象
2、直接在需要设计单例模式的类中new对象 ,由于私有了构造 不能直接获取该类的对象
   非静态的成员变量只能通过对象来获取,这里需要将创建的对象用static修饰
   静态的成员变量:   其他类可以直接类名点(class name.)的方式获取 其成员变量
3、考虑到其他类不能直接改造单例类的对象,需要将单例类对象私有 然后提供get()方法。
package threadtest;

/**
 * @author lixw
 * @date created in 11:50 2018/12/20
 */
public class SingleExample {
    public static void main(String[] args) {
        //car的引用指的是同一个地址
        Car car = Car.car;
        Car car1 = Car.car;
        System.out.println(car == car1);
        Car car2 = Car.car;
        Car car3 = null;
        //Car.car的作用域 会影响那些地方的数据??????????????????????
        Car.car = null;
        Car car4 = Car.car;
        System.out.println(car2 == car3);
        System.out.println(car2);
        System.out.println(car3);
        System.out.println(car4);
        System.out.println(car2 == car4);
    }
}

class Car {
    private int id;
    private String Model;
    private String name;

    private Car() {

    }
//使用public在其他类能够直接改造这个类的对象
    public static Car car = new Car();

}

\"在这里插入图片描述\"

再对单例类进行改造

package threadtest;

/**
 * @author lixw
 * @date created in 11:50 2018/12/20
 */
public class SingleExample {
    public static void main(String[] args) {
        //car的引用指的是同一个地址
        Car car = Car.car;
        Car car1 = Car.car;
        System.out.println(car == car1);
        Car car2 = Car.car;
        Car car3 = null;
        //Car.car的作用域 会影响那些地方的数据??????????????????????
        Car.car = null;
        Car car4 = Car.car;
        System.out.println(car2 == car3);
        System.out.println(car2);
        System.out.println(car3);
        System.out.println(car4);
        System.out.println(car2 == car4);
        Car inst = Car.getInstance();
        Car instance = Car.getInstance();

    }
}

class Car {
    private int id;
    private String Model;
    private String name;

    private Car() {

    }

    private static Car car = new Car();

    public static Car getInstance(){
        return car;
    }

}
收藏 打印