add abstract factory pattern diagram