您的位置:首页 > 其它

单例模式的饿汉和懒汉

2017-06-23 17:00 381 查看
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建类,并且对外提供。

优点:在系统内存中只存在一个对象,一次可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

缺点: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: