创建者模式:
- 单例设计模式
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。由于单例模式只生成一个实例,减少了系统性能的开销。
常见的五种单例模式实现方式:- 主要:
• 饿汉式(线程安全,调用效率高。 但是,不能延时加载。)
• 懒汉式(线程安全,调用效率不高。 但是,可以延时加载。) - 其他:
• 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题。不建议使用)
• 静态内部类式(线程安全,调用效率高。 但是,可以延时加载)
• 枚举单例(线程安全,调用效率高,不能延时加载)
- 主要:
- 饿汉式
package com.ujiuye.设计模式;
/**
* 测试饿汉式单例设计模式
* @author hasee
*/
public class SingleData {
//私有化构造器
private SingleData() {}
//创建一个静态私有的对象,立即加载这个对象,没有延迟加载的优势
//加载类时,天然的线程安全!
private static SingleData instance = new SingleData();
//提供一个公开的方法,让别人获取这个唯一的对象,方法没有同步,调用效率高。
public static SingleData getInstance() {
return instance;
}
public void method() {
System.out.println("单例模式好爽。。。。");
}
}
package com.ujiuye.设计模式;
/**
* 测试懒汉式单例模式(单例对象延迟加载)
* @author hasee
*/
public class Single {
//私有化构造器
private Single() {}
//类初始化时不初始化这个对象(延时加载,真正用的时候再创建)
private static Single instance = null;
//要提供一个公开的静态方法,供别人获取这个实例
//要在第一次调用这个方法时创建对象,方法同步,调用效率低。
public static synchronized Single getInstance() {
if(instance != null) {
instance = new Single();
}
return instance;
}
}
package com.ujiuye.设计模式;
public class Test01 {
public static void main(String[] args) {
SingleData sd = SingleData.getInstance();
sd.method();
SingleData sd1 = SingleData.getInstance();
System.out.println(sd.equals(sd1));
}
}
package com.ujiuye.设计模式;
public class Test02 {
public static void main(String[] args) {
Single single1 = Single.getInstance();
Single single2 = Single.getInstance();
System.out.println(single1 == single2);
}
}