design patterns: builder, interpreter