add pattern Factory Method