7.4 单例模式的扩展
是如果要求一个类只能产生两三个对象呢?该怎么实现?我们还以皇帝为例来说明。
代码清单7-5 固定数量的皇帝类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class Emperor { private static int maxNumOfEmperor = 2; private static ArrayList<String> nameList=new ArrayList<String>(); private static ArrayList<Emperor> emperorList=new ArrayList<Emperor>(); private static int countNumOfEmperor =0; static{ for(int i=0;i<maxNumOfEmperor;i++){ emperorList.add(new Emperor("皇"+(i+1)+"帝")); } } private Emperor(){ } private Emperor(String name){ nameList.add(name); } public static Emperor getInstance(){ Random random = new Random(); countNumOfEmperor = random.nextInt(maxNumOfEmperor); return emperorList.get(countNumOfEmperor); } public static void say(){ System.out.println(nameList.get(countNumOfEmperor)); } }
|
在Emperor
中使用了两个ArrayList
分别存储实例和实例变量。当然,如果考虑到线程安全问题可以使用Vector
来代替
有上限的多例模式
这种需要产生固定数量对象的模式就叫做有上限的多例模式
,它是单例模式的一种扩展,采用有上限的多例模式,我们可以在设计时决定在内存中有多少个实例,方便系统进行扩展,修正单例可能存在的性能问题,提供系统的响应速度。例如读取文件,我们可以在系统启动时完成初始化工作,在内存中启动固定数量的reader
实例,然后在需要读取文件时就可以快速响应。
原文链接: 7.4 单例模式的扩展