class single{
 
       private static single m_object1;
       private static single m_object2;
       public static int i=0;
  
       private single()
      {
 
       }
  
     public static single mb_getobject()
     {
          i++;//用于计数 对象的个数
         if(i<=2)         if(i==1) {
            m_object1=new single();
            return m_object1;
            }
    
         else{
            m_object2=new single();
           return m_object2;
            }
        else
       return m_object1;//
       } }//只能实例化两个对象的单体类设计完毕
public class J_Singleton { /**
  * @param args
  */
 public static void main(String[] args) {
  single a=single.mb_getobject();
  System.out.println(single.i);//测试静态成员值的变化
  single b=single.mb_getobject();//实例化单体类
  System.out.println(single.i);
        if(a==b)
         System.out.println("相同");
        else
         System.out.println("不同");
 }}
 结果显示  1          2          不同,我想问下:1          private single(){}是否未被调用 因为我试过, 将静态 成员 i 放入其中,实例化对象后 i值不变                            仅仅是为了 在其他类中 不能自行创建类single的其他对象                 2         有没有更好的设计方法

解决方案 »

  1.   

    这种写法可以了
    感觉就想是单例模式的一种变形
      

  2.   

    只能实例化n个对象的问题,也是常见问题了,通常的处理方法是:
    既然要实例化n个对象,那么就有一个管理这些对象(起码统计计数)的对象,而这个管理对象一定是单例模式的,所以,这个问题就变成:单例模式的容器+容器内对对象的管理逻辑 了分解以后,都是简单的问题了