public class Singleton {
//饿汉式
private static final Singleton singleton = new Singleton();
//构造方法私有,限制产生多个实例
private Singleton(){}
//获得实例
public static Singleton getSingleton(){
return singleton;
}
//类其它方法,尽量是static
public static void doSomething(){
}
}
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
/*
* 单例模式的变通,有上限的单例模式
*
*/
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();
}
}
}