首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写一个java类,只创建它的五个实例。

编写一个java类,只创建它的五个实例。
EN

Stack Overflow用户
提问于 2010-08-04 01:49:14
回答 11查看 5.1K关注 0票数 3

我想写一个java类,它只能被实例化5次,就像你只有一个实例的单例类一样。

除此之外,应该在循环的基础上选择实例。

假设我有一个类A,我应该只能创建这个类的5个实例。假设我有InstanceA_1,InstanceA_2,InstanceA_3,InstanceA_4,InstanceA_5,每当我需要使用它们的时候,都应该按轮询的方式来选择它们。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-08-04 02:05:37

正如Effective Java2 Edition推荐使用enum来实现单例一样,该方案也使用enum来实现单例。四胞胎?

代码语言:javascript
复制
import java.util.*;

public enum RoundRobin {
    EENIE, MEENIE, MINY, MO;

    private final static List<RoundRobin> values =
        Collections.unmodifiableList(Arrays.asList(values()));
    // cache it instead of creating new array every time with values()

    private final static int N = values.size();
    private static int counter = -1;

    public static RoundRobin nextInstance() {
        counter = (counter + 1) % N; // % is the remainder operator
        return values.get(counter);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(RoundRobin.nextInstance());
        }
        // EENIE, MEENIE, MINY, MO, EENIE, MEENIE, MINY, MO, ...
    }
}

将其扩展到五元组是不言而喻的。

另请参阅

  • 有效Java2版,使用私有构造函数或枚举类型执行单例属性从1.5版开始,还有第三种方法来实现单例。只需创建一个只有一个元素的枚举类型。这种方法在功能上等同于公共字段方法,只是它更简洁,提供了免费的序列化机制,并提供了针对多个实例化的铁板一块的保证,即使面对复杂的序列化或反射攻击也是如此。虽然这种方法尚未被广泛采用,但使用单元素枚举类型是实现singleton.

的最佳方法

相关问题

票数 14
EN

Stack Overflow用户

发布于 2010-08-04 01:54:09

你需要像Object pool这样的东西。最简单的实现是有一个包含5个对象的List的单例,无论何时调用getInstance(..),都应该迭代该列表并返回其中一个对象。

票数 2
EN

Stack Overflow用户

发布于 2010-08-04 01:52:39

这是家庭作业吗?

为什么不创建一个Factory来创建5个实例,并将它们存储在列表中?当有人调用Factory.getInstance()时,它将使用列表的正确索引获得正确的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3399191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档