알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법
public abstract class FileProcessor {
private String path;
public FileProcessor(String path) {
this.path = path;
}
public final int process() {
try(BufferedReader reader = new BufferedReader(new FileReader(path))) {
int result = 0;
Stirng line = null;
while((line = reader.readLine()) != null) {
result = getResult(result, Integer.parseInt(line));
}
return result;
} catch (IOException e) {
throw new IllegalArgumentException(path + "에 해당하는 파일이 없습니다.");
}
}
protected abstract int getResult(int result, int number);
}
public class Multiply extends FileProcessor {
public Multiply(String path) {
super(path);
}
@Override
protected int getResult(int result, int number) {
return result *= number;
}
}
public class Client {
public static void main(String[] args) {
FileProcessor fileProcessor = new Multiply("number.txt");
int result = fileProcessor.process();
System.out.println(result);
}
}