Created an interface to group Definition classes
Templates are built when the definition is created instead of on invocation Definitions are reused instead of created over and over again, so the price of template creation is payed only once.