Template Method
What?
How?
Why?
Code
class Builder {
// Template method
build() {
this.test()
this.lint()
this.assemble()
this.deploy()
}
}
class AndroidBuilder extends Builder {
test() {
console.log('Running android tests')
}
lint() {
console.log('Linting the android code')
}
assemble() {
console.log('Assembling the android build')
}
deploy() {
console.log('Deploying android build to server')
}
}
class IosBuilder extends Builder {
test() {
console.log('Running ios tests')
}
lint() {
console.log('Linting the ios code')
}
assemble() {
console.log('Assembling the ios build')
}
deploy() {
console.log('Deploying ios build to server')
}
}
const androidBuilder = new AndroidBuilder()
androidBuilder.build()
// Output:
// Running android tests
// Linting the android code
// Assembling the android build
// Deploying android build to server
const iosBuilder = new IosBuilder()
iosBuilder.build()
// Output:
// Running ios tests
// Linting the ios code
// Assembling the ios build
// Deploying ios build to server
class HouseTemplate{
constructor(){};
buildFoundations(){
console.log('Building Foundations')
}
buildHouse(){
this.buildFoundations();
this.buildPillars();
this.buildWalls();
this.buildWindows();
}
buildFoundations(){
console.log('Building foundations')
}
/**
* Default implementation
*/
buildWindows(){
console.log('I am done with building windows');
}
buildPillars(){
throw new Error('You have to build your own pillars')
}
buildWalls(){
throw new Error('You have to build your own walls')
}
}
class WoodenHouse extends HouseTemplate{
constructor(){
super();
};
buildWalls(){
console.log('Building walls for wooden house');
}
buildPillars(){
console.log('Building pillars for wooden house')
}
}
class BrickHouse extends HouseTemplate{
constructor(){
super();
};
buildWalls(){
console.log('Building walls for brick house');
}
buildPillars(){
console.log('Building pillars for brick house')
}
}
var woodenHouse = new WoodenHouse();
woodenHouse.buildHouse();
console.log('********---**********');
var brickHouse = new BrickHouse();
brickHouse.buildHouse();
Thx
deck
By just Just
deck
- 31