“”多例模式“”
2、设计一个类最多只能创建3个实例,
提供一个方法 实例get()
可以返回一个实例(最多返回3个),
再提供一个方法释放一个实例free(实例),
释放之后,后面又可以重新使用。
public class Single3
{
private static int count=0;//计数器
private final static int n=3;//最多可以生产的对象个数
// 定义一个Single3类型的引用数组,来存储对象的地址
public static Single3[] instance=new Single3[n];
// 定义私有构造方法(防止通过 new SingletonTest()去实例化)
private Single3()
{
System.out.println("已经生成新对象");
}
//
public static Single3 get()
{
for(int i=0;i<n;i++)
{
if (count==i)
{
instance[i]= new Single3();
count++;
System.out.println("可以再创建"+HowManyObjectCanBeCreate()+"个对象");
return instance[i];
}
}
return null;//返回空
}
//free()方法
public static void free(Single3 single3)
{
for(int i=0;i<n;i++)
{
if(single3==instance[i])
{
instance[i]=null;
count--;
}
}
System.out.println("可以再创建"+HowManyObjectCanBeCreate()+"个对象");
}
//统计还有多少对象可以创建
public static int HowManyObjectCanBeCreate()
{
int count2=0;
for(int i=0;i<n;i++)
if(instance[i]==null)
count2++;
return count2;
}
/* public static Single3 existThisOject(Single3 single3)
{
for(int i=0;i<n;i++)
{
if(single3==instance[i])
{
return instance[0];
}
}
return null;
}*/
/* public static void showExist(Single3 single3)
{
if(existThisOject(single3)!=null)
System.out.println("这个引用所引用的对象还在它的地址为:"+existThisOject(single3));
else System.out.println("这个引用所引用的对象已经撤销了");
}*/
}