Abstract Factory Pattern - This commit holds a good example where simple factory, factory method and Abstract factory all are implemented