java单例模式升级版-》只能生成3个对象

“”多例模式“”

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("这个引用所引用的对象已经撤销了");
    }*/
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值