O padrão de projeto de software que permite a criação de famílias de objetos relacionados ou dependentes, através de uma única interface, sem a necessidade de especificar a classe concreta, é denominado de