Abstract Factory with factory method and decorator combined