abstract factory realtime example