单身类识别

时间:2012-09-04 12:43:38

标签: java design-patterns singleton

有人可以告诉我这是否是单身人士课程吗?

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是同一个包中的另一个类。

6 个答案:

答案 0 :(得分:9)

这不是Singleton

Singleton例如:

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

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

答案 1 :(得分:2)

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

以下是Singleton的一个例子:

public class MySingleton{
    private MySingleton(){}

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

    public static MySingleton getInstance(){
        return InstanceHolder.instance;
    }
}

答案 2 :(得分:2)

不是。

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

这通常通过私有构造函数和静态方法来完成,以检索此唯一实例。此处Final_outputCafe_factory都不尊重此合约,因此没有人使用单例模式。

答案 3 :(得分:1)

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

答案 4 :(得分: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;
           }
    }

    }

答案 5 :(得分:-1)

否这不是singleTon

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;
   }

}