Behavioral design pattern in object-oriented programming which defines the high-level skeleton of an operation to be implemented by helper methods