1 单例模式
定义: 单例模式只存在单一的实例,即保证对象在内存中只有一个对象存在。
例:打印服务器,网站计数器。只能存在一个
jdk中的应用:Runtime 类
2 保证类在内存中只有一个对象步骤
A.把类构造函数私有,不让外界创建对象;
B.在类里面创建一个对象;
C.通过一个公共的访问方式给外界提供一个获取对象的入口。
D.单例对象,和获取对象的方法都必须定义为static的
3饿汉式单例模式和 懒汉式单例模式
饿汉式在在类加载的时候初始化对象,懒汉式在使用的时候才初始化对象。
4 开发过程中实际使用
一般使用而汉事单例模式,懒汉式模式存在多线程安全:
A.延迟加载思想;
B.线程安全问题:产生的原因,解决方法、
实例源码:
HungryStudent.java
public class HungryStudent {
private HungryStudent() {
}
private static HungryStudent hs = new HungryStudent();
public static HungryStudent getStudent() {
return hs;
}
public void show() {
System.out.println("我是饿汉。");
}
}
LazyStudent.java
public class LazyStudent {
private LazyStudent() {
}
private static LazyStudent ls;
public static LazyStudent getStudent() {
/*
* 多个线程同时访问时,为了确保只创建了一个对象,必须加上线程安全。
*/
if (ls == null) {
synchronized (ls) {
if (ls == null) {
ls = new LazyStudent();
}
}
}
return ls;
}
public void show() {
System.out.println("我是懒汉");
}
public static void main(String[] args) {
HungryStudent hs1 = HungryStudent.getStudent();
HungryStudent hs2 = HungryStudent.getStudent();
System.out.println(hs1 == hs2);
hs1.show();
LazyStudent ls1 = LazyStudent.getStudent();
LazyStudent ls2 = LazyStudent.getStudent();
System.out.println(ls1 == ls2);
ls1.show();
}