首页 > 代码库 > java 23 - 2 设计模式之单例模式
java 23 - 2 设计模式之单例模式
单例模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
A:把构造方法私有
B:在成员位置自己创建一个对象
C:通过一个公共的方法提供访问
单例模式之饿汉式: (一进来就造对象,一回家就吃饭,饿。。)
1 public class Student { 2 // A:把构造方法私有 3 private Student() { 4 } 5 6 // 在成员位置自己创建一个对象 7 // 静态方法只能访问静态成员变量,加静态 8 // 为了不让外界直接访问修改这个值,加private 9 private static Student s = new Student();10 11 // C:通过一个公共的方法提供访问12 // 为了保证外界能够直接使用该方法,加静态13 public static Student getStudent() {14 return s;15 }16 }
测试类:
1 public class StudentDemo { 2 public static void main(String[] args) { 3 //按照平常来创建2个对象试试 4 // Student s1 = new Student(); 5 // Student s2 = new Student(); 6 // System.out.println(s1 == s2); // false,地址值不一样,证明是2个不同的对象 7 8 9 //下面是直接更改了对象s的值,要避免这样的情况,所以在Student类中给对象加私有private10 //Student.s = null;11 12 // 通过单例如何得到对象呢?13 Student s1 = Student.getStudent();14 Student s2 = Student.getStudent();15 System.out.println(s1 == s2);16 17 System.out.println(s1); // null,cn.itcast_03.Student@175078b18 System.out.println(s2);// null,cn.itcast_03.Student@175078b19 }20 }
单例模式之懒汉式:(用的时候才创建对象,不饿不吃)
1 public class Teacher { 2 private Teacher() { 3 } 4 //先不创建对象,就是没new 5 private static Teacher t = null; 6 7 public synchronized static Teacher getTeacher() { 8 // 为了防止出现线程安全问题,这里使用同步机制:synchronized 9 //使用的时候,进行判断10 if (t == null) {11 //如果是第一次使用,就创建对象12 t = new Teacher();13 }14 //不是第一次,就返回之前创建的对象15 return t;16 }17 }
测试类:
1 public class TeacherDemo {2 public static void main(String[] args) {3 Teacher t1 = Teacher.getTeacher();//t1进去Teacher中是null,创建对象4 Teacher t2 = Teacher.getTeacher();//t2进去不是null,用的t1创建的对象5 System.out.println(t1 == t2);6 System.out.println(t1); // cn.itcast_03.Teacher@175078b7 System.out.println(t2);// cn.itcast_03.Teacher@175078b8 }9 }
单例模式:
饿汉式:类一加载就创建对象
懒汉式:用的时候,才去创建对象
面试题:单例模式的思想是什么?请写一个代码体现。
开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(可能会出问题的单例模式)
A:懒加载(延迟加载)
B:线程安全问题
a:是否多线程环境 多线程环境下是
b:是否有共享数据 是,对象t就被共享了
c:是否有多条语句操作共享数据 是,t1、t2就在共同操作t
还有看这个文章,转载:
JAVA设计模式之单例模式
java 23 - 2 设计模式之单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。