builder and prototype patterns