-2

我有以下设计要求:

  • interface Server {}
  • public class ServerImpl implements Server {}, 必须是单例
  • public class ServerABC extends ServerImpl {}
  • public class ServerXYZ extends ServerImpl {}

现在我想将方法​​放在类中,Server它们的实现应该由ServerABCor给出ServerXYZ

ServerImpl

public class ServerImpl implements Server {
    private static Server server;

    public static synchronized RESTClient getInstance() {
        if (server == null) {
            server = new ServerImpl ();
        }
        return server;
    }
}

我怎样才能使这项工作?

如果我将方法放在Server接口中,ServerImpl则必须实现它,但我希望子类(ServerABCServerXYZ)提供实现。应该使用 ServerImpl 对象调用这些方法。

4

3 回答 3

1

使Server接口成为一个抽象类,并在方法前加上abstract关键字。然后,在ServerImpl您实现这些抽象方法。

编辑:

ServerImpl创建一个抽象类,并在这些方法前面加上关键字abstract。并在ServerABC其中ServerXYZ实现这些抽象方法。

于 2012-07-27T06:07:00.747 回答
0

我认为最好的方法是避免单例模式。如果您只需要一个实例,则只创建一个实例。众所周知,Singleton 会使测试变得更加困难,并且并没有真正带来巨大的好处。

在你的情况下我会做的是:

  • 要么消除接口并使类ServerImpl成为抽象类。应该在子类中实现的所有方法也必须标记为抽象。在某些情况下,您希望只有一个子类为特定方法提供实现。UnsupportedOperationException在这种情况下,只需在不能实现它的类中抛出一个。或者
  • 消除该类ServerImpl并简单地让其他 2 个类实现该接口。如果该类ServerImpl自己没有实现太多,那么这是更好的方法。
于 2012-07-27T06:20:32.483 回答
0

创建一个名为 AbstractServer 的抽象类。将所有必要的方法放在这个类中,并在 ServerXYZ 和 ServerABC 中扩展它。

于 2012-07-27T06:08:42.597 回答