Java---设计模块(单例的变形)(多例2)

简介: Java---设计模块(单例的变形)(多例)

★ 单例变形——多例模式

把上面缓存的单例实现,做成一个能够控制对象个数的共享空间,供整个应用程序使用。在缓存中维护指定个数的对象,每个对象的key值由该类内部指定,有外部请求时直接返回其中一个对象出去。

说明:相当于维护一个指定数量的对象池,当请求个数超过控制的总数时,开始循环重复使用 。

package cn.hncu.pattern.mulitition.multi;
import java.util.HashMap;
import java.util.Map;
public class A {
    private static final Map<Integer, A> map= new HashMap<Integer, A>();
    private static final int MAX=3;//控制容器中所能使用对象的总个数
    private static int cont = 1;//代表池中目前将要被使用的对象的序号
    public static A getInstance(){
        A a = map.get(cont);
        if(a==null){
            a=new A();
            map.put(cont, a);
        }
        cont++;
        if(cont>MAX){
            cont=1;
        }
        return a;
    }
}


测试的类:

package cn.hncu.pattern.mulitition;
public class Test {
    public static void main(String[] args) {
        Atest2();
    }
    private static void Atest2() {
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
        System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance());
    }
}


输出结果:

cn.hncu.pattern.mulitition.multi.A@18a49e0
cn.hncu.pattern.mulitition.multi.A@1f82982
cn.hncu.pattern.mulitition.multi.A@16d2633
cn.hncu.pattern.mulitition.multi.A@18a49e0
cn.hncu.pattern.mulitition.multi.A@1f82982
cn.hncu.pattern.mulitition.multi.A@16d2633

可以看到: 123行的输出个不相同,

第4行的地址和第一行的相同,

第5行的地址和第二行的相同,

第6行的地址和第三行的相同。

依次类推,循环节点为3.

目录
相关文章
|
6月前
|
缓存 Java
java开发常用模块——缓存模块
java开发常用模块——缓存模块
|
6月前
|
设计模式 Java
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
55 2
|
6月前
|
设计模式 安全 Java
在Java中即指单例设计模式
在Java中即指单例设计模式
40 0
|
1月前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
29 3
|
6月前
|
安全 Java API
Java一分钟之——Java模块系统:模块化开发(Jigsaw)
【5月更文挑战第20天】Java 9引入了Jigsaw模块系统,改善代码组织和依赖管理。模块通过`module-info.java`定义,声明名称、导出包及依赖。常见问题包括依赖循环、未声明依赖和过度导出。避免这些问题的策略包括明确声明依赖、谨慎导出包和避免循环依赖。通过实例展示了模块间的关系,强调理解模块系统对于构建整洁、安全和可维护的Java应用的重要性。
116 5
|
6月前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
3月前
|
设计模式 人工智能 Java
Java 如何使用单例类
Java 如何使用单例类
16 1
|
3月前
|
设计模式 Java
【Java】单例设计模式
【Java】单例设计模式
|
4月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
62 1
|
3月前
|
设计模式 SQL 安全
单例模式大全:细说七种线程安全的Java单例实现,及数种打破单例的手段!
设计模式,这是编程中的灵魂,用好不同的设计模式,能使你的代码更优雅/健壮、维护性更强、灵活性更高,而众多设计模式中最出名、最广为人知的就是Singleton Pattern单例模式。通过单例模式,我们就可以避免由于多个实例的创建和销毁带来的额外开销,本文就来一起聊聊单例模式。