Object Oriented Design Pattern Examples with Tests