单例模式:保证类在内存中只有一个对象。外界只有使用权,无法创建对象。
如何保证内存中只有一个对象
A、构造方法私有
B、在成员位置自己创建一个变量
C、通过一个公共的方法提供访问
单例模式分为饿汉式和饱汉式
饿汉式:类一加载就创建对象 如Runtime类就属于饿汉式 他的exec()方法可以直接打开dos命令。
饱汉式:用的时候才去创建对象
饿汉式代码
package cn.idcast3;public class Student { private Student() { } // 属于单例模式的饿汉式 ,就是一进来就创建对象 //加私有的原因是由于外界不能访问,只有使用权 //加静态的原因:静态方法只能访问静态成员变量 private static Student s = new Student(); //为了保证外界可以直接使用,所以需要加静态 public static Student getStudent() { return s; }}
测试
package cn.idcast3;public class StudentDemo {public static void main(String[] args) { Student s1 =Student.getStudent(); Student s2= Student.getStudent(); System.out.println(s1==s2); }}
饱汉式代码
package cn.idcast3;public class Teacher { private Teacher() { } private static Teacher t = null; //由于静态方法是共享的,所以t1创建了对象,但是t2不用 //懒加载(延迟加载)问题,由于饱汉式是需要用的时候才创建的,所以会存在 //存在线程安全问题,有共享数据Teacher和操作多条语句,并且将来可能在多线程环境 public synchronized static Teacher getTeacher() { if (t == null) { t = new Teacher(); } return t; }}
测试
package cn.idcast3;public class TeacherDemo {public static void main(String[] args) { Teacher t1= Teacher.getTeacher(); Teacher t2 = Teacher.getTeacher(); System.out.println(t1==t2);}}