[NewFeature] Add Abstract Factory Pattern.