OOP patterns built out in Apex for reference