Abstract Design pattern implementation