added 1 abstract factory and 2 concrete factory