give a summary of the class, the design approach (expanding with custom strategies), and outline functions that the user can/should override.