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

Made with Slides.com