Command Pattern
Template Method pattern.