zoukankan      html  css  js  c++  java
  • Singleton 单例模式

    Singleton 单例模式
    第一种型式,饿汉式,在环境初始化,即JVM开始运行时就生成实例。
    public class Singleton {
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
    return Singleton.instance;
    }
    }

    第二种型式,懒汉式,即需要使用时才生成实例,可以减少内存使用。
    public class Singleton {
    private static Singleton instance = null;

    public static Singleton getInstance() {
    synchronized (Singleton.class) {
    if(null == instance) {
    instance = new Singleton();
    }
    }
    return instance;
    }
    }
    这种用了synchronized 传说也会出现逻辑不严密而new出两个实例的情况,所以又出现了一种变式,即双重锁机制,然而这种在苛刻的条件下依旧逻辑不够严密。
    public class Singleton {
    private static Singleton instance = null;

    public static Singleton getInstance() {
    if(null == instance) {
    synchronized (Singleton.class) {
    if(null == instance) {
    instance = new Singleton();
    }
    }
    }
    return instance;
    }
    }
    第三种形式,枚举形式,也是我现在比较常用的形式。
    public enum Singleton {
    INSTANCE;
    public static Singleton getInstance() {
    //do your Logic
    // return INSTANCE;
    }
    }
    这种方式除了更简明,还等同于public属性方式。免费提供了序列化机制,即使面对尖端的序列化或者反射攻击,它都提供了坚实的单例。

    这里有一篇文章的测试代码可以说明用第三种方式的坚实性和防止攻击造成单例失效 http://lzh166.javaeye.com/blog/620817

    另外,还有用反射等比较钻牛角尖的方法构建单例的形式,以及一些测试,可以看一下这篇分析的文章 http://www.javaeye.com/topic/60179

      
             转载自 http://hi.baidu.com/monsterfairy/blog/item/924777450a2e4e186b63e5b0.html

  • 相关阅读:
    ASP.NET应用界面开发新工具推荐,不要错过
    WinForm应用程序的交互界面可以创建哪些样式?
    快速创建一个.NET 5 WPF应用程序,这招一定要Get
    Blazor应用界面开发
    DevExpress v21.1帮助文档下载大全分享
    WinForms应用界面开发入门教程指南
    Kendo UI 透视网格
    WPF应用界面开发新风向
    Angular UI组件库Kendo UI for Angular扩展组件,这些功能值得了解
    响应式Web开发框架DevExtreme v21.1
  • 原文地址:https://www.cnblogs.com/svennee/p/4081200.html
Copyright © 2011-2022 走看看