单例模式介绍:
1,类的单例设计模式,采取一定的方法保证整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
单例模式之--饿汉式--
步骤:
- 将构造器私有化 (防止别的类创建对象)
- 在本类创建一个静态对象
- 在一个静态方法中返回这个静态对象
public class Person {
private String name;
//这个对象为什么要用静态来修饰?因为不用静态下面的静态方法就不能调用这个对象。
private static Person person = new Person("小明");//静态对象
//如果这个方法不用静态来修饰,那么就只能在别的类里创建这个类的对象来调用了,就又回到起初的位置了
public static Person person(){//返回对象的方法
return person;
}
private Person(String name) {//私有化的构造器
this.name = name;
}
}
饿汉式有一个特点:
只要加载了这个类,那么就会执行创建对象的那行代码,那个对象就已经存在了。
注意:没有调用这个对象,这个对象也会被执行,这样一个特点会造成资源的浪费
单例模式之--懒汉式--
步骤:
- 将构造器私有化 (防止别的类创建对象)
- 在本类定义一个私有化静态对象
- 在一个公共静态方法中返回这个静态对象(在返回前面加上一个判断,如果这个对象是null,就给他 new 一个空间)
public class Animal {
private String name;
static int age = 6;
private static Animal animal;//定义的对象
public static Animal animal(){//返回对象的方法
if (animal == null){
animal = new Animal("cat");
}
return animal;
}
private Animal(String name) {//私有化的构造器
System.out.println("构造器被执行。。。");
this.name = name;
}
}
而懒汉式的特点就是:
只有第一次调用 animal 方法时,才会给他 new 一个对象,后面再调用时则会返回上一次创建的对象。
总结:
单例模式中,懒汉式比饿汉式更加智能。不会出现没有调用返回对象的方法也创建对象。
饿汉式 VS 懒汉式
1,二者最主要的区别在于创建对象的时机不同:饿汉式是在加载类的时候就创建对象,而懒汉式是在使用时才创建对象。
2,饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(关于线程安全问题,等我学到线程了再来补充)
3,饿汉式存在浪费资源的可能。因为如果没有使用对象,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
4,再我们JavaSE标准类中,Java.lang.Runtime就是经典的单例模式。