tema 5 - abstract factory pattern