Template Method types
Template Method is a behavioral design pattern that defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure:
Must be implemented by every subclass.
Already have some default implementation, but still can be overridden if needed.
Optional step with an empty body.
Usually, hooks are placed before and after crucial steps of algorithms, providing subclasses with additional extension points.