饿汉式
package org.westos.常用的设计模式.单例模式之饿汉;
/**
* 单例设计模式概述:
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
优点
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺点
没有抽象层,因此扩展很难。职责过重,在一定程序上违背了单一职责
* 饿汉式:在该类加载的时候对象就被创建
* */
public class Demo {
public static void main(String[] args) {
Student a = Student.getStudent();
Student b = Student.getStudent();
System.out.println(a==b);
}
}
package org.westos.常用的设计模式.单例模式之饿汉;
public class Student {
//私有化构造方法
private Student() {}
//创建一个对象在类的成员位置,私有化使其不能被修改,static使其在类加载的时创建
private static Student s = new Student();
//创建一个方法使其他类可以使用该对象,采用静态方法,因为构造方法被私有化
public static Student getStudent() {
return s;
}
}
懒汉式
package org.westos.常用的设计模式.单例模式之懒汉;
/**
* 懒汉式:
* 符合单例模式核心思想
* 1)自定义一个类,将无参构造私有化
* 2)在成员位置声明变量
* 3)提供公共静态功能,在里面判断的创建该类对象,返回该类对象
*
* 如果是开发中,那么就使用饿汉式(饿汉式它不会出现问题的单例模式)
* 如果是面试中,那么使用懒汉式(因为他是可能出现问题的一种单例模式)
*
* 面试题:
* 你使用过单例模式吗?简单介绍一种单例模式,请用代码设计
* 面试官想问的是:使用设计单例的懒汉式,能否想到使用同步机制解决线程的安全问题..
*
* 懒汉式(延迟加载 -->懒加载)
* 可能会出现问题
* ---> 多线程的问题
* --->校验多线程安全问题的标准
* 1)是否是多线程环境
* 2)是否有共享数据
* 3)是否有多条语句对共享数据进行操作 (使用同步机制进行操作)
*
* */
public class Demo {
public static void main(String[] args) {
Teacher a = Teacher.getTeacher();
Teacher b = Teacher.getTeacher();
System.out.println(a==b);
}
}
package org.westos.常用的设计模式.单例模式之懒汉;
public class Teacher {
private Teacher() {}
private static Teacher t = null;
//提供公共的静态功能
/*public static Teacher getTeacher() {
//如何创建该类对象,需要用的时候在创建
//t1,t2,t3
//在这里需要判断
synchronized (t) {
if(t==null) {
t = new Teacher() ;
}
return t ;
}
}*/
//静态的同步方法 (锁对象: 类名.class)
public synchronized static Teacher getTeacher() {
if(t==null) {
t = new Teacher() ;
}
return t ;
}
}