template method example
interpreter pattern example