Template Method Pattern
Posted by Dustin Boston in Design Patterns.
The Template Method Pattern is a behavioral design pattern that defines the structure of an algorithm in a base class while allowing subclasses to customize specific steps.
The Template Method Pattern is a behavioral design pattern that defines the
skeleton of an algorithm in a base class, delegating specific steps to
subclasses. This pattern promotes code reuse and ensures consistency in the
overall structure of the algorithm while allowing flexibility in its details.
Source Code Listing
code.ts
abstract class AbstractClass {
templateMethod(): void {
this.primitiveOperation1();
this.primitiveOperation2(); // No need to return here if void
}
abstract primitiveOperation1(): void; // Abstract methods
abstract primitiveOperation2(): void;
}
class ConcreteClass extends AbstractClass {
primitiveOperation1(): void {
console.log("primitiveOperation1");
}
primitiveOperation2(): void {
console.log("primitiveOperation2");
}
}
// Static Template Method (using a factory function for better type inference)
class StaticAbstractClass {
static templateMethod<T extends StaticAbstractClass>(
this: new () => T,
): void {
const cls = new this();
cls.primitiveOperation1();
cls.primitiveOperation2();
}
primitiveOperation1(): void {
// Default implementations
}
primitiveOperation2(): void {
// Implement this method
}
}
class StaticConcreteClass extends StaticAbstractClass {
primitiveOperation1(): void {
console.log("primitiveOperation1");
}
primitiveOperation2(): void {
console.log("primitiveOperation2");
}
}
const example = {
run(): void {
const concrete = new ConcreteClass();
concrete.templateMethod();
StaticConcreteClass.templateMethod();
},
};
example.run();