abstract factory design pattern real time example