java - 在两个类之间共享代码(使用抽象操作)

标签 java oop inheritance software-design

我正在用 Java 开发一个服务器应用程序。服务器需要两种类型的服务器类。这些类有一些共同的方法,这些方法中的代码是完全相同的。因此,我创建了一个包含所有共享代码的抽象父类(super class),并且两个类都继承了它。但是,代码的某些部分需要通过子类来精确化。我的意思是父类(super class)“依赖”子类方法。

这是我的意思的一个纯化示例:

public abstract class AbstractServer
{
    public void loadConfig(String configPath)
    {
        //Load the configuration file.

        //This code is exactly the same for subclasses.
    }

    public void startRMI(int port)
    {
        //Create an empty RMI registry.
        //This part also need to be identical.

        //Here' where the superclass "rely" on subclasses.
        fillRegistry(); //Call the method overwritten by subclasses.
    }

    /**
    Bind remote objects in the RMI registry
    */
    protected abstract void fillRegistry(); //This method will be overriten by subclasses.
}

我觉得这样做真的很糟糕,但我找不到另一种更干净的方法来做到这一点。

所以,我想要的是一些关于如何做得更好的建议。

谢谢,很抱歉我的英语不好。

最佳答案

你的方法很好。坚持下去,伙计。

我感觉到你理解它的“哲学需要”。只要基类是抽象的,基类“依赖”子类就可以。它知道此时必须注册一些东西,但对于到底要注册什么,它没有任何线索。因此,高级过程在基类中进行编码,并带有可以由派生类插入的“漏洞”。高层流程和“洞”本身的位置是有值(value)的,这证明了基类的实现是合理的。派生类只是遵循“差异编码”的基本 OO 原则并堵塞“漏洞”。

关于java - 在两个类之间共享代码(使用抽象操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208454/

相关文章:

java - 如何从java中的字符串中提取子字符串

c# - C# 中的类定义约定

c++ - 什么是多重再继承?

Apache-Tomcat 7 上的 JAVA_OPTS

java - Windows Server 2012 上的 [SYN] 上的 TCP 套接字 accept() 返回

java - JPA 不同的内连接与连接表上的条件

c++ - 如何使用 UML 类图实现从父类派生的类对象类型

c# - 一个接口(interface)和一个只有虚拟抽象方法的抽象类是一回事吗?

c# - 重写继承方法时避免显式类型转换

java - 在 JEditorPane 中设置新文本