Skip to main content

Template Method Pattern

Definition: define the skeleton of an algorithm in a a method, deferring some steps to subclasses. Template Method pattern lets subclasses redefine certain steps of an algorithms without changing the algorithm's structure. 

Class diagram:

The OO Principles: 
- The Hollywood Principles: Dont call us, we'll call you.
The template method in supper class tell the subclasses that, dont call us, we'll call you. The supper class is on high level component, it has control over the algorithm, and call the subclasses only when they're need for an implementation of template method. 
The client will depend on the abstraction supper class rather than the concrete subclasses, which reduce the dependencies of overall system.

Advantages:
- There is no code duplication. (the reusable code is pulled to the parent class)
- Flexibility lets subclasses decide how to implement steps in an algorithm.

Disadvantages:
- Difficult for debug and maintenance.

Relation with other pattern:
- Factory method pattern: Subclasses decide which concrete classes to instantiate.  this pattern is a specialization of Template Method.
- Strategy pattern: Encapsulate interchangeable behaviors and use delegation to decide which behavior is use.
- Template method: Subclasses decide how to implement the steps in an algorithm.

What problem does this pattern solve?
Two different components have significant similarities, but demonstrate no reuse of common interface or implementation. If a change common to both components becomes necessary, duplicate effort must be expended.

Use case:

The template method pattern is a technique that defines the steps required for some action, implementing the boilerplate steps, and leaving the customizable steps as abstract. Subclasses can then implement this abstract class and provide a concrete implementation for the missing steps.

public abstract DatabaseQuery {

    public void execute() {
        Connection connection = createConnection();
        executeQuery(connection);
        closeConnection(connection);
    } 

    protected Connection createConnection() {
        // Connect to database...
    }

    protected void closeConnection(Connection connection) {
        // Close connection...
    }

    protected abstract Results executeQuery(Connection connection, String query);
}




Comments

Popular posts from this blog

How to Install SQL Server on MacOS with docker

 I'm writing a small tut for who need to install SQL Server on macOS using docker Step 1: Download the SQL Server Image sudo docker pull mcr.microsoft.com/mssql/server:2019-latest Step 2: Launch the SQL Server Image in Docker docker run -d --name example_sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pass.word-123' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest Step 3: Check the SQL Server Docker Container docker ps -a Step 4: Install SQL Server Command-Line Tool sudo npm install -g sql-cli Step 5: Connect to SQL Server  5.1 Using Command mssql -u sa -p Pass.word-123 5.2: Using VSCode to connect to sql server Using the extension SQL Server (mssql)

Create Grid using React native

After fist post about react native I feel I'm getting familiar with react native, this framework quite easy to use, today I continue with another tutorial about create a simple grid card in react native. Let see the our final result first:                             Let's start... Analytics Assump our data has below structure: We have an array of rows and each row has an array of columns, then I decided to use FlatList to display object in cloumns array in horizontal direction, you can imaging like below image. Gridcard design Card Item each card has a logo and a text. I'm using the Icon from lib react-native-vector-icons To have a flatlist in horizontal we use  horizontal = {true} property, and to make sure the width of flatlist is same as screen with we use  contentContainerStyle={{ flexGrow: 1, justifyContent: 'center' }} Grid Now the implementation quite easy now, just need to...