多例模式是对象创建模式的一种,它通过实例容器保存实例,利用私有构造方法防止外部构造,然后提供方法给外界调用获取实例。多例模式中的多例类可以有多个实例,而且多例类必须自己创建和管理自己的实例,并向外界提供自己的实例。它的特点在于一可以有多个实例,二必须自己创建自己管理实例,并且向外界提供。它主要是为了解决并发问题中,多个操作需要不能使用同一个实例的问题。
下面以一个简单的例子说明这个模式的使用。
一间房里有两个开关,每个开关控制一盏灯。
package com.a;
import java.util.ArrayList;
import java.util.Random;
@SuppressWarnings("unchecked")
public class Switch{
private static int swithNum = 2;//有多少开关
private static ArrayList switchArr = new ArrayList(swithNum);//开关的列表
private static ArrayList switchInfo = new ArrayList(swithNum);//开关信息的列表
private static int switchN = 0;//正在操作的开关
static{
for (int i = 0 ; i < swithNum; i++){
switchArr.add(new Switch("开关"+(i + 1)));
}
}
private Switch(){
}
private Switch(String info){
switchInfo.add(info);
}
public static Switch shareInstance(){
Random random = new Random();
switchN = random.nextInt(swithNum);
return (Switch)switchArr.get(switchN);
}
public static void switchInfo(){
System.out.println(switchInfo.get(switchN));
}
}
package com.a;
import com.a.Switch;
public class Person{
public static void main(String[] args){
Switch s = Switch.shareInstance();
s.switchInfo();
}
}
编译Java文件并运行:
未命名文件夹 imac03$ javac -d . Switch.java
未命名文件夹 imac03$ javac -d . Person.java
未命名文件夹 imac03$ java com.a.Person
结果:
未命名文件夹 imac03$ java com.a.Person
开关1
未命名文件夹 imac03$ java com.a.Person
开关2
网友评论