«abstract»
DataMiner
+ mine() «final»
# openFile()*
# extract()*
# parse()*
# summary() hook
PdfMiner
# openFile()
# extract()
# parse()
CsvMiner
# openFile()
# extract()
# summary()
Skeleton in the base, steps in subclasses
1abstract class DataMiner {2 final void mine() { // skeleton — locked3 openFile(); extract(); parse(); summary();4 }5 protected abstract void openFile(); // primitive6 protected abstract void extract(); // primitive7 protected abstract void parse(); // primitive8 protected void summary() {} // hook (no-op)9}1011class PdfMiner extends DataMiner { /* override the 3 primitives */ }12class CsvMiner extends DataMiner { /* override primitives + summary() hook */ }
State
mine()fixed skeleton (final)