Get Instance应该返回类型为implementsor类或类型为interface的对象

时间:2014-12-24 07:36:32

标签: java interface

我有以下课程:

public class NinjaImpl implements Ninja{
   private NinjaImple () {}
   public static Ninja getInstance() {return Singleton.instance;}
   private static class Singleton
   {
        private static final Ninja instance = new NinjaImpl();
   }

   // Implementation
}

我和一位同事进行了设计讨论。内部类是否应该包含NinjaImpl类型或ninja类型的变量。 getInstance()应该以同样的方式返回Ninja或NinjaImpl吗?

1 个答案:

答案 0 :(得分:2)

通常getInstance()应该返回接口,因为它允许您更改实现类而不会影响接口的用户。

但是,因为在你的情况下getInstance()是实现类的一个方法,getInstance()的用户已经依赖于实现类而不管它返回的类型,所以它不是真的很重要,我不确定在这种情况下完全定义Ninja接口是否有用。

如果getInstance()是某个工厂类的方法(让我们称之为NinjaFactory),返回接口会更有意义,这可能会返回Ninja接口的任何实现它选择返回。