加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

单例枚举方式实例

发布时间:2020-12-15 00:32:21 所属栏目:C语言 来源:网络整理
导读:单例枚举方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊 代码如下: package com.fs.message.utils; import com.aliyun.mns.client.CloudAccount; import com.ali
  • 单例枚举方式是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();
      }
      }
      }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读