什么是单例模式
对某个类只能存在一个对象的实例,并且该类只提供一个取得其对象实例的方法
两种方式
- 饿汉式(还未使用就已经被创建)
- 构造器私有化(防止直接new)
- 类的内部创建对象
- 向外暴露一个静态的公共方法
- 代码实现
public class SingleTon1 {
public static void main(String[] args) {
System.out.println(Cat.getInstance());
}
}
class Cat{
private String name;
private static Cat cat = new Cat("毛毛");
private Cat(String name) { //构造器私有化
this.name = name;
}
public static Cat getInstance(){
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
- 懒汉式(只有使用了getInstance()才会被创建,后面再次调用时)
- 构造器私有化
- 定义一个static静态属性对象
- 提供一个public的static方法,可以返回一个对象
public class SingleTon2 {
public static void main(String[] args) {
Dog dog1 = Dog.getInstance();
Dog dog2 = Dog.getInstance();
System.out.println(dog1);
System.out.println(dog2);
System.out.println(dog1 == dog2);
}
}
class Dog{
private String name;
private static Dog dog;
private Dog(String name) {
this.name = name;
}
public static Dog getInstance(){
if (dog == null)
dog = new Dog("阿狗");
return dog;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
}
结果
Dog{name=‘阿狗’}
Dog{name=‘阿狗’}
true