1

谁能告诉我这是否是单例课程?

public class Final_output{

  Cafe_factory obj=null;

  private Final_output()
  {
    obj = new Cafe_factory();
    obj.getOrder("French Fries");
    obj.getOrder("Biryani");
    obj.getOrder("Ice-cream");
  }

  public static void main(String args[])
  {
    new Final_output();
  }
}

Cafe_factory是同一个包中的另一个类。

4

6 回答 6

9

这不是Singleton

单例的例子是:

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}
于 2012-09-04T12:45:58.527 回答
2

不,不是。因为你不能在它之外创建这个类的实例(至少应该存在一个实例)。另一方面 - 您可以根据需要在内部创建main任意数量的实例(因此它也不是单例)。

这是一个单例的例子:

public class MySingleton{
    private MySingleton(){}

    private static InstanceHolder{
        private static final MySingleton instance = new MySingleton();
    }

    public static MySingleton getInstance(){
        return InstanceHolder.instance;
    }
}
于 2012-09-04T12:46:44.283 回答
2

它不是。

单例的目标是将可以创建的同一类的实例数限制为 1,并提供静态方法来检索此实例。

这通常通过私有构造函数和静态方法来检索这个唯一实例。这里既不Final_output也不Cafe_factory尊重这个契约,所以他们都没有使用单例模式。

于 2012-09-04T12:48:14.297 回答
1

由于您也可以在 Final_output 类之外的代码中创建 n 个新的 Cafe_Factory 对象,因此它不是单例。永远不会使用 new 关键字创建单例。相反,您通过静态方法获取它的实例。

于 2012-09-04T12:48:44.457 回答
0

这个 :

public class Final_output{

    private static Cafe_factory obj = null;

    private Final_output()
    {
       obj = getCafeInstance();
    }

    public static getCafeInstance(){
        if(null == obj){
             obj = new Cafe_factory();
             obj.getOrder("French Fries");
             obj.getOrder("Biryani");
             obj.getOrder("Ice-cream");
           }else{
               return obj;
           }
    }

    }
于 2012-09-04T13:02:57.250 回答
-1

不,这不是单吨

public class Final_output{
   private static Final_output ourInstance = new Final_output();
   Cafe_factory obj=null;    

   private Final_output() {
     obj = new Cafe_factory();
     obj.getOrder("French Fries");
     obj.getOrder("Biryani");
     obj.getOrder("Ice-cream");
   }

   public Final_output getINstance(){
       return ourInstance;
   }

}
于 2012-09-04T12:49:09.150 回答