Which of the following design patterns defines the skeleton of an algorithm but allows subclasses to override steps?