abstract factory extend