设计模式
a、创建型模式
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式
b、结构型模式
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
c、行为型模式
模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、
状态模式、策略模式、职责链模式、访问者模式
1.1、单例模式之双重检测锁实现
这个模式将同步内容内容下到if内部,提高了执行的效率不必每次获取对象时都进行同步,只有第一次才同步创建了以后就没必要了
问题:
由于编译器优化原因和JVM底层内部模型原因,偶尔会出问题,不建议使用
1.2、单例模式之静态内部类的实现(也是一种懒汉式实现)
要点:
外部类没有static属性,则不会像饿汉式那样立即加载对象
只有真正调用了getInstance(),才会加载静态内部类。
加载类时是线程安全的。
instance是static final类型,保证了内存中只有这样一个实例存在,而且只能被赋值一次,
从而保护保证了线程安全性兼备了并发高效调用和延迟加载的优势!
SingletonDemo04.java
package junit.matrix.pattern.singleton;
/**
* 测试静态内部类实现单例模式
* 这种方式:线程安全,调用效率高,并且实现了延时加载!
*
* SingletonDemo02<BR>
* 创建人:Matrix <BR>
* 时间:2016年2月23日-下午5:40:58 <BR>
*
* @version 1.0.0
*
*/
public class SingletonDemo04 {
// 静态内部类
private static class SingletonClassInstance {
private static SingletonDemo04 instance = new SingletonDemo04();
}
// 私有化构造器
private SingletonDemo04() {
}
// 方法没有同步,调用效率高!
public static SingletonDemo04 getInstance() {
return SingletonClassInstance.instance;
}
}
1.3、单例模式之枚举实现
优点:
实现简单
枚举本身就是单例模式。由JVM从根本上提供保障!
避免通过反射和反序列化的漏洞!
调用效率高!
缺点:
无延迟加载(无懒加载)
SingletonDemo05.java
package junit.matrix.pattern.singleton;
/**
* 测试枚举式实现单例模式
*
* SingletonDemo02<BR>
* 创建人:Matrix <BR>
* 时间:2016年2月23日-下午5:40:58 <BR>
*
* @version 1.0.0
*
*/
public enum SingletonDemo05 {
// enum枚举类的一个缩写
// 定义一个枚举元素,这个枚举元素本身就是单例对象!
INSTANCE;
// 添加自己需要的操作
public void signletonOperation() {
}
}
如何选用?
单例对象 占用 资源少,不需要 延时加载
枚举式 好于 饿汉式(调用效率高,不能延时加载)
单例对象 占用 资源大,需要 延时加载
静态内部类式(调用效率高,可以延时加载) 好于 懒汉式(调用效率不高,可以延时加载)