Add uml diagrams and implement Abstract Factory using method producer