一、多例模式的特点
- 多例类可有多个实例
- 多例类必须自己创建、管理自己的实例,并向外界提供自己的实例
二、有上限多例类
两个骰子Die为例:
import java.util.Random;
import java.util.Date;
public class Die {
private static Die die1 = new Die();
private static Die die2 = new Die();
private Die() {}
public static Die getInstance(int whichOne) {
if (whichOne == 1) return die1;
else return die2;
}
public synchronized int dice() {
Date d = new Date();
Random r = new Random(d.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value % 6;
value += 1;
return value;
}
}
通过饿汉式创建两个Die实例,根据传入的参数返还两个实例中的一个。dice()方法相当于掷骰子。
public class Client {
private static Die die1,die2;
public static void main(String[] args) {
die1 = Die.getInstance(1);
die2 = Die.getInstance(2);
die1.dice();
die2.dice();
}
}
当上限等于1时,有上限的多例类就回到了单例类。因此,在这种情况下,多例类是单例类的推广,单例类是多例类的特殊情况。
三、无上限多例模式
当无上限时,可以说多例模式是单例模式的推广,但是反过来,这种多例类不一定能够回到单例类。
无上限多例模式必然使用聚集管理所有的实例。