需要注意:
一、方法要被调用只有两种方式:1.对象 2.类名。在单例设计模式当中,不能使用对象调用方法,只能使用类型.方法进行调用。所以要在pubilc后加上static,用静态方式调用【public static Single getInstance()】。静态方法要访问静态成员,所以类名定义对象时候,前面也要加上static。【private static Single s = new Single()】。
二、s作为类变量需要进行私有化【private static Single s = new Single();】
三、饿汉式,图示,栈内存中先加载主函数main,里面有ss变量存在栈内存里;然后single类一加载,方法区就有single类的空间,single类里中的s变量、getInstance()、静态、构造函数private Single(){}都存在于方法区内;new Single对象存在于堆内存,并且该对象对应一个地址,该地址值赋值给了方法区中的s变量,s变量就指向对象new Single()。当调用getInstance()方法时,就返回了一个s值,s变量又把值【地址值】赋予了ss变量,这就ss变量也指向了对象new Single。总结:这就保证了一个对象在类中的唯一性。
/*
设计模式:解决某一类问题最行之有效的方法。
java中23种设计模式:
单例设计模式:解决一个类在内存只存在一个对象。
想要保证对象唯一。
1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三部怎么用代码体现呢?
1,将构造函数私有化。
2,在类中创建一个本类对象。
3,提供一个方法可以获取到该对象。
对于事物该怎么描述,还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
*/
class Single
{
private Single(){}
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
s1.setNum(23);
System.out.println(s2.getNum());
// Single s1 = new Single();
// Single s2= new Single();
// s1.setNum(30);
// System.out.println(s2.getNum());
// Student s1 = new Student();
// s1.setAge(30);
//
// Student s2 = new Student();
// s2.setAge(12);
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
}
}
class Student
{
private int age;
private static Student s = new Student();
private Student(){}
public static Student getStudent()
{
return s;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}