面试题答案
一键面试模板方法模式结构
- 抽象类(AbstractClass):定义了一个模板方法,该方法定义了算法的骨架,由一系列基本操作组成。这些基本操作可以是抽象的,也可以有默认实现。在文件读取场景中,抽象类可以定义读取文件的总体流程,例如打开文件、读取内容、关闭文件等步骤,其中部分步骤可能是抽象的,需要具体子类实现。
- 具体子类(ConcreteClass):继承自抽象类,实现抽象类中定义的抽象基本操作。在文件读取场景下,具体子类分别对应文本文件读取类和二进制文件读取类,它们根据自身文件类型特点实现相应的读取操作。
具体实现思路
- 定义抽象文件读取类:
abstract class AbstractFileReader {
// 模板方法
public final void readFile() {
openFile();
readContent();
closeFile();
}
protected abstract void openFile();
protected abstract void readContent();
protected abstract void closeFile();
}
- 定义文本文件读取子类:
class TextFileReader extends AbstractFileReader {
@Override
protected void openFile() {
System.out.println("打开文本文件");
}
@Override
protected void readContent() {
System.out.println("读取文本文件内容");
}
@Override
protected void closeFile() {
System.out.println("关闭文本文件");
}
}
- 定义二进制文件读取子类:
class BinaryFileReader extends AbstractFileReader {
@Override
protected void openFile() {
System.out.println("打开二进制文件");
}
@Override
protected void readContent() {
System.out.println("读取二进制文件内容");
}
@Override
protected void closeFile() {
System.out.println("关闭二进制文件");
}
}
- 使用示例:
public class Main {
public static void main(String[] args) {
AbstractFileReader textReader = new TextFileReader();
textReader.readFile();
AbstractFileReader binaryReader = new BinaryFileReader();
binaryReader.readFile();
}
}
在上述代码中,AbstractFileReader
定义了读取文件的模板方法 readFile
,包含打开文件、读取内容、关闭文件三个步骤,TextFileReader
和 BinaryFileReader
分别针对文本文件和二进制文件实现了这些步骤。通过这种方式,利用模板方法模式实现了对不同类型文件读取操作的统一管理和不同实现。