Total revision of Abstract Factory Pattern