User Abstract Factory Pattern