Re-construct Abstract Factory Pattern case, and add Simple Factory & Factory Method pattern