(GOF23设计模式)_单例模式_双重检查锁式_静态内部类式_枚举式

设计模式

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() {
    }
}

如何选用?

单例对象 占用 资源少,不需要 延时加载
枚举式 好于 饿汉式(调用效率高,不能延时加载)

单例对象 占用 资源大,需要 延时加载
静态内部类式(调用效率高,可以延时加载) 好于 懒汉式(调用效率不高,可以延时加载)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值