Template Method¶
The Template Method Pattern is a behavioral design pattern where a base class (Abstract Class) defines the skeleton of an algorithm, while allowing subclasses (Concrete Classes) to override specific steps without changing the overall structure of the algorithm.
Structure¶
| Role | Example | Responsibility |
|---|---|---|
| Abstract Class | DataProcessor |
Defines the template method and declares abstract steps |
| Concrete Class | CSVDataProcessor, JSONDataProcessor, XMLDataProcessor |
Implements specific behavior for individual steps |
Steps¶
- Create an Abstract Class
- Define the template method that describes the algorithm
- Declare abstract steps that subclasses must implement
- Optionally define hook methods that subclasses may override
- Create Concrete Classes that implement these steps
classDiagram
class DataProcessor {
+process()
#openFile()
#parseData()*
#validateData()*
#transformData()
#saveResults()
#closeFile()
}
class CSVDataProcessor {
#parseData()
#validateData()
#transformData()
}
class JSONDataProcessor {
#parseData()
#validateData()
#transformData()
}
class XMLDataProcessor {
#parseData()
#validateData()
#transformData()
}
CSVDataProcessor --|> DataProcessor
JSONDataProcessor --|> DataProcessor
XMLDataProcessor --|> DataProcessor
The
process()method is declaredfinal, ensuring that the algorithm always follows the same sequence of steps while allowing subclasses to customize individual parts of the workflow.
Example: Data Processor¶
A DataProcessor defines a fixed pipeline:
open → parse → validate → transform → save → close
Each subclass implements the steps required to handle a specific file format.
A DataRecord Value Object is passed between steps, decoupling them from raw array structures.
Tests¶
| DataProcessorTest.php | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | |
Example 2: Pizza Preparation¶
The Pizza class defines the preparation process:
prepare dough → add sauce → add toppings → bake
The base class controls the preparation order while subclasses customize the topping step.