interpreter design pattern java