Applied a template method pattern to avoid strategy pointer is not set before use

Details: strategy pointers operations are wrapped up in a template
class. classes applied with strategy pattern should inherit from this
template class