多例模式中的多例类可以有多个实例,并且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
多例类结构图:
一、有上限多例模式
一个实例数目有上限的多例类已经把实例的上限当做逻辑的一部分,并创建到了多例类的内部,这种多例模式叫做有上限多例模式。一个有上限的的多例类可以使用静态变量存储所有的实例,特别是在实例数目不多的时候,可以使用一个个的静态变量存储一个个的实例。在数目较多的时候,就需要使用静态聚集存储这些实例。
一个实例数目有上限的多例类已经把实例的上限当做逻辑的一部分,并创建到了多例类的内部,这种多例模式叫做有上限多例模式。一个有上限的的多例类可以使用静态变量存储所有的实例,特别是在实例数目不多的时候,可以使用一个个的静态变量存储一个个的实例。在数目较多的时候,就需要使用静态聚集存储这些实例。
1、类图
2、java代码
package multiton.finite;
import java.util.Date;
import java.util.Random;
public class Die {
private static Die die1 = new Die();
private static Die die2 = new Die();
private Die(){
System.out.println("Die is created............");
}
public static Die getIntance(int whichOne){
if(whichOne==1){
return die1;
}else {
return die2;
}
}
synchronized public int dice(){
Date date = new Date();
Random r = new Random(date.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value%6;
value += 1;
return value;
}
import java.util.Random;
public class Die {
private static Die die1 = new Die();
private static Die die2 = new Die();
private Die(){
System.out.println("Die is created............");
}
public static Die getIntance(int whichOne){
if(whichOne==1){
return die1;
}else {
return die2;
}
}
synchronized public int dice(){
Date date = new Date();
Random r = new Random(date.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value%6;
value += 1;
return value;
}
}
package multiton.finite;
public class Client {
private static Die die11,die12,die21,die22;
public static void main(String args[]){
die11 = Die.getIntance(1);
die12 = Die.getIntance(1);
die21 = Die.getIntance(2);
die22 = Die.getIntance(2);
System.out.println("die11 = " + die11.dice());
System.out.println("die12 = " + die12.dice());
System.out.println("die21 = " + die21.dice());
System.out.println("die22 = " + die22.dice());
}
}
private static Die die11,die12,die21,die22;
public static void main(String args[]){
die11 = Die.getIntance(1);
die12 = Die.getIntance(1);
die21 = Die.getIntance(2);
die22 = Die.getIntance(2);
System.out.println("die11 = " + die11.dice());
System.out.println("die12 = " + die12.dice());
System.out.println("die21 = " + die21.dice());
System.out.println("die22 = " + die22.dice());
}
}
二、无上限多例模式
多例类的实例数目并不需要有上限,实例数目没有上限的多例模式就叫做无上限多例模式。由于事先不知道要创建多少个实例,因此,必然使用聚集管理所有的实例。
多例类的实例数目并不需要有上限,实例数目没有上限的多例模式就叫做无上限多例模式。由于事先不知道要创建多少个实例,因此,必然使用聚集管理所有的实例。
1、类图