Abstract Pattern and Factory Method