单例设计模式
解决一个类在内存中只存在一个对象。
想要保证对象唯一需要做到的:
- 为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
- 为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
- 为了其他程序能够访问自定义对象,可以对外提供一些访问方式
解决方式
- 将构造函数私有化(对应上述1)
- 在类中创建一个本类对象(对应上述2)
- 提供一个`方法可以获取到该对象(对应上述3)
代码体现
class Student
{
private Student(){}
private String name;
private static Student s = new Student();
public static Student getInstance()
{
return s;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Student s1 = Student.getInstance();
Student s2 = Student.getInstance();
s1.setName("Big-man");
System.out.println(s1.getName());
System.out.println(s2.getName());
}
}
上述Student类中,将构造函数私有化,外部类无法建立Student类对象,private static Student s = new Student(),在Student类中建立自身对象,并通过getInstance方法对外提供自身对象的访问方式。
主函数执行 Student s1 = Student.getInstance() 访问getInstance方法,把 Student 类的对象 s 地址值赋值给 s1,同样执行 Student s2 = Student.getInstance(),把对象 s 的地址值赋值给 s2 此时,s1 和 s2指向同一个对象。该方法是先初始化对象,称为***饿汉式***。
class Student
{
private String name;
private int age;
private Student(){}
public static Student s = null;
public static Student getInstance()
{
if(s == null)
{
s = new Student();
}
return s;
上述Student类加载进内存,但是对象并没有存在,只有调用了getInstance方法时。才会建立对象。对象是方法被调用时才初始化,叫做对象的延迟加载。称为***懒汉式***