单例模式的饿汉和懒汉
2017-06-23 17:00
381 查看
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建类,并且对外提供。
优点:在系统内存中只存在一个对象,一次可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺点:1.没有抽象层,因此扩展很难。2.指责过重,在一定程序上违背了单一职责。
饿汉式和懒汉式的区别:
饿汉式:类一加载就创建对象。
懒汉式:用的时候,采取创建对象。
饿汉:
懒汉
优点:在系统内存中只存在一个对象,一次可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺点:1.没有抽象层,因此扩展很难。2.指责过重,在一定程序上违背了单一职责。
饿汉式和懒汉式的区别:
饿汉式:类一加载就创建对象。
懒汉式:用的时候,采取创建对象。
饿汉:
public class Student { // 构造私有 private Student() { } // 自己造一个 // 静态方法只能访问静态成员变量,加静态 // 为了不让外界直接访问修改这个值,加private private static Student s = new Student(); // 提供公共的访问方式 // 为了保证外界能够直接使用该方法,加静态 public static Student getStudent() { return s; } }
/* * 单例模式:保证类在内存中只有一个对象。 * * 如何保证类在内存中只有一个对象呢? * A:把构造方法私有 * B:在成员位置自己创建一个对象 * C:通过一个公共的方法提供访问 */ public class StudentDemo { public static void main(String[] args) { Student s1 = Student.getStudent(); Student s2 = Student.getStudent(); System.out.println(s1 == s2); System.out.println(s1); System.out.println(s2) } }
懒汉
public class TeacherDemo { public static void main(String[] args) { Teacher t1 = Teacher.getTeacher(); Teacher t2 = Teacher.getTeacher(); System.out.println(t1 == t2); System.out.println(t1); // cn.itcast_03.Teacher@175078b System.out.println(t2);// cn.itcast_03.Teacher@175078b }
/* * 单例模式: * 饿汉式:类一加载就创建对象 * 懒汉式:用的时候,才去创建对象 * * 面试题:单例模式的思想是什么?请写一个代码体现。 * * 开发:饿汉式(是不会出问题的单例模式) * 面试:懒汉式(可能会出问题的单例模式) * A:懒加载(延迟加载) * B:线程安全问题 * a:是否多线程环境 是 * b:是否有共享数据 是 * c:是否有多条语句操作共享数据 是 */ public class Teacher { private Teacher() { } private static Teacher t = null; public synchronized static Teacher getTeacher() { // t1,t2,t3 if (t == null) { //t1,t2,t3 t = new Teacher(); } return t; } }
相关文章推荐
- java设计模式之单例模式写法,懒汉,饿汉,双检锁
- Singleton 单例模式(懒汉方式和饿汉方式)
- 单例模式中的懒汉模式和饿汉模式
- 单类设计模式 --- 饿汉模式 & 懒汉模式
- 从java.lang.Runtime看单例懒汉饿汉模式的选择
- 单例模式——懒汉模式和饿汉模式
- 单例设计模式(饿汉模式与懒汉模式)
- 单例模式之懒汉模式与饿汉模式的对比
- 设计模式C++实现(4)——饿汉懒汉之单例模式
- 饿汉模式和懒汉模式的多线程访问问题
- 懒汉模式与饿汉模式
- java 单例模式 -饿汉 -懒汉
- 设计模式之单例模式:懒汉&饿汉
- 单例模式,懒汉模式,饿汉模式区别
- Java中的单例设计模式之饿汉模式、懒汉模式
- 单例模式中的懒汉模式和饿汉模式
- Singleton 单例模式(懒汉方式和饿汉方式)
- 单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
- 从java.lang.Runtime看单例懒汉饿汉模式的选择
- 【单例模式】——饿汉模式与懒汉模式及其区别