update Abstract Factory Pattern