Added abstract factory

To create instances of the DrawingLibraryInterface
Implemented abstract factory

Removed public modifiers to enforce pattern
Using Graph instead of DirectedGraph