这几天遇到一个问题,一个Service里有一个map,但是这个Service有别的继承,于是每一个Service都会创建一个map,但是这个map应该是公用的,于是就有问题了。。。(按结构说Service里是不应该有map存在的,结果设计有问题,但是结构不影响研究)

特殊的解决方式:把此map改为static即可,因为一个类的静态变量在不同实例中是共用的,所以这样便实现了map的单例模式。

(标准解决方案是放在一个单例的manager中,以便公共调用,这里偷懒。。。)

还有标准单例,一个private static的本类实例,一个public static的获取本类实例的方法,关键的在于构造方法是私有的。(没有构造时默认为共有构造,所以一定要重写构造方法)

public class RateManager {

    private static RateManager singleInstance = new RateManager();

    public static RateManager getInstance() {
return singleInstance;
} private RateManager(){
BillRateService billRateService = ApplicationHelper.getApplicationContext().getBean(BillRateService.class);
this.agentRateMap = billRateService.getSipuserRateMap();
this.groupRateMap = billRateService.getSkillGroupRateMap();
} private Map<String, BillRate> agentRateMap = new HashMap<>(); private Map<String, BillRate> groupRateMap = new HashMap<>(); public void addAgent(String key, BillRate rate) {
this.agentRateMap.put(key, rate);
} public void addGroup(String key, BillRate rate) {
this.groupRateMap.put(key, rate);
} public void deleteAgent(String key, BillRate rate) {
this.agentRateMap.remove(key);
} public void deleteGroup(String key, BillRate rate) {
this.groupRateMap.remove(key);
} public void refresh() {
BillRateService billRateService = ApplicationHelper.getApplicationContext().getBean(BillRateService.class);
this.agentRateMap = billRateService.getSipuserRateMap();
this.groupRateMap = billRateService.getSkillGroupRateMap();
} public BillRate getAgentRate(String agentName) {
BillRate rate = this.agentRateMap.get(agentName);
if (rate == null)
rate = this.agentRateMap.get(null);
return rate;
} public BillRate getGroupRate(String queueId) {
BillRate rate = this.groupRateMap.get(queueId);
if (rate == null)
rate = this.groupRateMap.get(null);
return rate;
} }

这样还有一个好处就是,可以在构造方法时初始化一些东西。因为静态方法是第一次调用的时候才会初始化的,所以第一次调用的时候才会走new,成功在启动后初始化。

Java静态变量的用法:伪单例的更多相关文章

  1. JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

    JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有 ...

  2. Java静态变量的初始化(static块的本质)

    Java静态变量的初始化(static块的本质) 标签: javaclassstring编译器jdk工作 2010-02-06 07:23 33336人阅读 评论(16) 收藏 举报  分类: Jav ...

  3. java 静态变量初始化

    java 静态变量在编译阶段就已经明确位置, 所以静态变量的声明与初始化在编码顺序上可以颠倒.也就是说可以先编写初始化的代码,再编写声明代码.如: public class Test { // 静态变 ...

  4. python基础练习题(题目 模仿静态变量的用法)

    day27 --------------------------------------------------------------- 实例041:类的方法与变量 题目 模仿静态变量的用法. 程序 ...

  5. php和java静态变量用途的思考

    静态变量有哪些用途? 比如创建单例对象. 统计访问次数.数量等等. 多线路和进程中可能会使用. 深入理解补充.... PHP 单例模式解析和实战 php设计模式——单例模式 php static 与 ...

  6. 有趣的bug——Java静态变量的循环依赖

    背景 是的,标题没有错误,不是Spring Bean的循环依赖,而是静态变量之间的循环依赖. 近期的项目均是简单的Maven项目,通过K8S部署在阿里云上,其配置文件读取规则如下所示: (1) 优先读 ...

  7. 【Java】设计模型-五种单例模型

    一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够 ...

  8. java中你确定用对单例了吗?

    作为程序员这样的特殊物种来说,都掌握了一种特殊能力就是编程思想,逻辑比較慎重,可是有时候总会忽略到一些细节,比方我,一直以来总认为Singleton是设计模式里最简单的,不用太在意,然而就是由于这样的 ...

  9. Effective Java - 构造器私有、枚举和单例

    目录 饿汉式单例 静态常量 静态代码块 懒汉式单例 尝试加锁 同步代码块 双重检查 静态内部类单例 枚举单例 Singleton 是指仅仅被实例化一次的类.Singleton代表了无状态的对象像是方法 ...

随机推荐

  1. memcache使用经历

    memcache可以看成是一个大内存库,因为可以集群,所以可以看成是无限大的内存库.既然是内存库,那么我们放的就是一些map了.map里就键值对,虽然内存可以通过集群的方式无限扩展,但单个键值对的大小 ...

  2. Docker Toolbox on Windows 7

    1,下载DockerToolbox,可选daocloud或官网下载 https://get.daocloud.io/toolbox/ 2,配置虚拟机路径环境变量,避免系统C盘,很占空间 MACHINE ...

  3. 分布式锁之三:Redlock实现分布式锁

    之前写过一篇文章<如何在springcloud分布式系统中实现分布式锁?>,由于自己仅仅是阅读了相关的书籍,和查阅了相关的资料,就认为那样的是可行的.那篇文章实现的大概思路是用setNx命 ...

  4. PHP封装验证类

    <?php /** * Created by PhpStorm. * User: jiqing * Date: 18-7-24 * Time: 下午4:36 * 常用验证 */ class Va ...

  5. Linux学习笔记 - 入门

    简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSI ...

  6. windows下配置protobuf2.6.1

    步骤: 下载protobuf-2.6.1.zip和protoc-2.6.1-win32.zip,地址:https://github.com/google/protobuf/tags 到目录protob ...

  7. maven项目依赖包问题

    问题 maven传递依赖 解决方案   前段时间,开发中遇到一个关于maven依赖包的问题:由于业务需要,支付网关对账代码中的slf4j-api包需要更新,原包为1.5.8版本,需要更新到1.6.4版 ...

  8. py编码终极版

    说起python编码,真是句句心酸.算起来,反复折腾两个来月了.万幸的是,终于梳理清楚了.作为一个共产主义者,一定要分享给大家.如果你还在因为编码而头痛,那么赶紧跟着我咱们一起来揭开py编码的真相吧! ...

  9. Halcon学习(八)文本操作

    标签: 学习 杂谈 分类: halcon学习 1.open_file( : : FileName, FileType : FileHandle) FileType: 'output':创建文本 ‘ap ...

  10. OSGI 模块化

    推荐教程:https://course.tianmaying.com/osgi-toturial+osgi-concept#15