Java 扩展实现另一个类的抽象类
我对OOP非常陌生,正在研究与解析器相关的项目代码。 它包含以下类和接口Java 扩展实现另一个类的抽象类,java,class,interface,abstract,Java,Class,Interface,Abstract,我对OOP非常陌生,正在研究与解析器相关的项目代码。 它包含以下类和接口 public interface Parser { } public abstract class AbstractParser implements Parser{ } public class CSVParser extends AbstractParser{ } public class XMLParser extends AbstractParser{
public interface Parser {
}
public abstract class AbstractParser implements Parser{
}
public class CSVParser extends AbstractParser{
}
public class XMLParser extends AbstractParser{
}
我无法理解为什么要这样做?接口
解析器
代表所有解析器必须提供的契约
AbstractParser
只实现该契约的一部分,即对所有解析器都相同的部分(如果有任何公共部分),还可能提供一些对实现具体类有用的受保护方法
CSVParser
和XMLParser
是具体的实现。他们使用AbstractParser
提供的公共设施来履行Parser
合同
此模式是一种分解公共代码的方法,因此它只编写一次,并由所有实现共享。具体的类只需要实现其特定需求所特有的代码。这是一种基本的OOP设计,基本上是“接口而非实现的程序”的一个示例。,更清楚地阅读一下坚实的设计原则 现在在这段代码中,有一个
解析器
接口,所以如果任何类是解析器,那么它必须实现它,同样,如果我们想给每个解析器提供一些默认行为,这就是为什么有AbstractParser
要理解这段代码,您必须查看一下集合的JDK源代码。
在这里您将看到,List、Set、Map
是接口,然后您有AbstrictList、AbstractSet、AbstractMap
类,这些类被定义为抽象类,并具有一些方法的默认实现,如size()
。然后,您可以实例化一些具体的实现,比如ArrayList、HashMap、HashSet
。
我建议您完成Collections框架设计,也可以。接口解析器可用于声明类似parse的方法及其返回类型和输入参数 CSVParser和XMLParser等实现类将使用覆盖典型面向对象行为的方法来定义方法体
在这两者之间引入抽象类,以便在解析器需要时引入任何状态,例如:FileHandle、LogHandle。接口仅定义签名,抽象类可以实现一些方法。谢谢!这种模式的名称是什么?我肯定它有一个名称,但在OOP出现之前(20世纪70年代),我就一直在使用它。我相信会有人插话说出“官方”的名字。我把它叫做“分解公共代码”。它基本上是“为接口而不是实现而编程”,请看我的答案,希望它能对您有所帮助。