The template method is a well known design pattern, in which a base class implements a main execution operation, which calls one or (usually) more
virtual template methods, which are usually overridden in derived classes. In this pattern, the base may or may not implement the virtual
template methods. The base class may implement a template method if there is an appropriate default behavior which can occur for that method. The
base class may also declare any template methods as pure virtual, which will force the derived classes to override those functions.