有上线的多例模式怎么实现呢?还是以皇帝为例。
1) 先把两个皇帝定义出来:
package com.teng.pattern;
import java.util.ArrayList;
import java.util.Random;
/**
*
* <br>创建日期:2016年5月28日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public class Emperor {
//最多只能有两个皇帝
private static int maxNumOfEmperor = 2;
//存放皇帝名称的列表
private static ArrayList emperorInfoList = new ArrayList(maxNumOfEmperor);
//存放皇帝的列表
private static ArrayList emperorList = new ArrayList(maxNumOfEmperor);
//正在被人尊称的是哪个皇帝
private static int countNumOfEmperor = 0;
//先把2个皇帝产生出来
static{
//把所有的皇帝都产生出来
for(int i = 0;i < maxNumOfEmperor ;i++){
emperorList.add(new Emperor("皇"+(i+1)+"帝"));
}
}
//不允许new皇帝
private Emperor(){
}
private Emperor(String info){
emperorInfoList.add(info);
}
/**
* @since 1.0
* @return
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年5月28日 下午11:22:06
*/
public static Emperor getInstance(){
Random random = new Random();
countNumOfEmperor = random.nextInt(maxNumOfEmperor);//随机拉出一个皇帝
return (Emperor)emperorList.get(countNumOfEmperor);
}
/**
* 皇帝叫什么名字
* @since 1.0
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年5月28日 下午11:23:52
*/
public static void emperorInfo(){
System.out.println(emperorInfoList.get(countNumOfEmperor));
}
}
2) 那大臣是比较惨了,两个皇帝啊,怎么拜啊,只要是皇帝就行 :
package com.teng.pattern;
/**
* <br>创建日期:2016年5月28日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public class Minister {
/**
* @since 1.0
* @param args
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年5月28日 下午11:29:25
*/
public static void main(String[] args){
int ministerNum = 10; //10个大臣
for(int i = 0; i < ministerNum ; i++){
Emperor emperor = Emperor.getInstance();
System.out.println("第"+(i+1)+"大臣参拜的是:");
emperor.emperorInfo();
}
}
}