Design patterns examples implemented in c#