单例枚举方式实例

前端之家收集整理的这篇文章主要介绍了单例枚举方式实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 单例枚举方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊
    代码如下:

package com.fs.message.utils;

import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.MNSClient;

/**

  • @see

  • https://github.com/keaplogik/Java-Design-Concepts

  • 枚举除了线程安全和防止反射强行调用构造器之外,还提供了自动序列化机制

  • 防止反序列化的时候创建新的对象。

  • 因此,Effective Java推荐尽可能地使用枚举来实现单例。
    */
    /**

  • @author wangkai

  • @2016年3月28日 上午12:28:50

  • @desc:单例终极写法-枚举方式
    */
    public enum MnsClientFactory {

    /**

    • 单实例
      */
      INSTANCE;

    /**

    • app.properties 消息服访问配置文件
      */
      private static final String FILE_NAME = "app.properties";

    /**

    • 访问阿里云账户信息
      */
      private static CloudAccount account;

    /**

    • mns client need only initialize once
      */
      private static MNSClient sMNSClient;

    private MnsClientFactory() {
    }

    static{
    //放入配置文件
    Configs.setPath(FILE_NAME);
    // mns 账户
    account = new CloudAccount(Configs.getProperty("mns.accesskeyid"),Configs.getProperty("mns.accesskeysecret"),Configs.getProperty("mns.accountendpoint"));
    // 创建客户端
    sMNSClient = account.getMNSClient();
    }
    /**

    • 获取MNSClient
    • @return
      */
      public MNSClient createClient() {
      // 认证信息
      return sMNSClient;
      }

    /**

    • 关闭客户端 释放资源
      */
      public void closeClient() {
      if (sMNSClient.isOpen()) {
      sMNSClient.close();
      }
      }
      }

猜你在找的程序笔记相关文章