Template Method
Where a portion of an algorithm to be used in a class is dependant on the type of an object of its subclasses.
In systems that go through a re-factoring stage.
Any algorithm that depends on the type of object it is applied to.
Greater flexibility and reuse.
Easy to modify an algorithm to take into account other types of objects (of the same hierarchy).