确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
/* * 单例模式的变通,有上限的单例模式 * */ public class Emperor { //设有两位皇帝 private static int maxNumOfEmperor = 2; //单例模式中,成员属性与方法尽量static //保存皇帝名称 private static ArrayList<String> nameList = new ArrayList<String>(); //保存皇帝实例 private static ArrayList<Emperor> emperorList = new ArrayList<Emperor>(); //当前皇帝Number private static int numEmperor = 0; //生产实例 static { for (int i=0; i<maxNumOfEmperor; i++){ emperorList.add(new Emperor("emperor"+i)); } } //构造方法私有 private Emperor(){ } //构造方法私有 private Emperor(String name){ nameList.add(name); } //获得实例,但是随机的 public static Emperor getInstance(){ Random random = new Random(); numEmperor = random.nextInt(maxNumOfEmperor); return emperorList.get(numEmperor); } //类中的其它方法,static public static void say(){ System.out.println(nameList.get(numEmperor)); } } public class Minister { public static void main(String[] args) { // 设有5位大臣依次向皇帝敬礼,皇帝随机 int ministerNum = 5; for(int i=0; i<ministerNum; i++){ Emperor emperor = Emperor.getInstance(); System.out.print("Minister-"+i+" is greeting: "); emperor.say(); } } }