Design patterns and Apex