Pattern · Core

Template Method

Put the fixed skeleton of an algorithm in a base-class method, and let subclasses fill in the specific steps — without changing the overall structure or order.

Asked atAmazonMicrosoftOracle
step 1 / 8
Skeleton in the base, steps in subclasses
is-ais-a
«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 — locked
3 openFile(); extract(); parse(); summary();
4 }
5 protected abstract void openFile(); // primitive
6 protected abstract void extract(); // primitive
7 protected abstract void parse(); // primitive
8 protected void summary() {} // hook (no-op)
9}
10 
11class PdfMiner extends DataMiner { /* override the 3 primitives */ }
12class CsvMiner extends DataMiner { /* override primitives + summary() hook */ }
State
mine()fixed skeleton (final)

DataMiner.mine() is the TEMPLATE — a final method that fixes the sequence: open → extract → parse → summary. The steps are abstract (marked *), left empty for subclasses to fill. mine() itself can never be reordered.