Kam*_*mal 3 java design-patterns
我想编写一个只能实例化5次的java类,就像你只有一个实例的单例类一样.
除此之外,应以循环方式选择实例.
假设我有一个A类.我应该只能创建这个类的5个实例.假设我有InstanceA_1,InstanceA_2,InstanceA_3,InstanceA_4,InstanceA_5.每当我需要使用它们时,应该循环选择它们.
pol*_*nts 14
正如Effective Java 2nd Editionenum推荐实现单例,这个解决方案也用来实现... quadrupleton?enum
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, ...
}
}
Run Code Online (Sandbox Code Playgroud)
将其扩展到五元组是不言自明的.
从版本1.5开始,有第三种方法来实现单例.只需使用一个元素创建一个枚举类型.这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.