The Template Method pattern should be used:
to implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary.
when re-factoring is performed and common behavior is identified among classes. A abstract base class containing all the common code (in the template method) should be created to avoid code duplication.