added example for abstractFactory pattern