0Pricing
Kotlin Academy · Aula

Métodos de fábrica com companion object

Implemente padrões de fábrica usando companion object e o operador invoke.

Métodos de fábrica com companion object é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

O padrão de método de fábrica

Os métodos de fábrica criam objetos com nomes significativos e lógica própria, ocultando a complexidade do construtor. O objeto companheiro do Kotlin é o local ideal para eles.

Construtor privado + fábrica

Torne o construtor privado e forneça métodos de fábrica por meio do objeto companheiro.
class Token private constructor(val value: String) {
    companion object {
        fun generate() = Token(java.util.UUID.randomUUID().toString())
        fun fromString(s: String) = Token(s.trim())
    }
}
val t = Token.generate()

Métodos de fábrica nomeados

Nomes descritivos deixam a intenção clara — ao contrário das sobrecargas de construtor.
class Duration private constructor(val ms: Long) {
    companion object {
        fun ofMillis(ms: Long) = Duration(ms)
        fun ofSeconds(s: Long) = Duration(s * 1000)
        fun ofMinutes(m: Long) = Duration(m * 60_000)
    }
}
val d = Duration.ofMinutes(5)

Retornando nulo da fábrica

As fábricas podem retornar nulo para entradas inválidas em vez de lançar uma exceção.
class Percentage private constructor(val value: Int) {
    companion object {
        fun of(value: Int): Percentage? {
            return if (value in 0..100) Percentage(value) else null
        }
    }
}
val p = Percentage.of(75) ?: error("Invalid")

Instâncias armazenadas em cache

As fábricas podem armazenar instâncias em cache e reutilizá-las.
class Direction private constructor(val name: String) {
    companion object {
        private val cache = mutableMapOf<String, Direction>()
        fun of(name: String) = cache.getOrPut(name.uppercase()) {
            Direction(name.uppercase())
        }
    }
}

Operador invoke como fábrica semelhante a um construtor

Defina invoke() para chamar a classe como uma função.
class Email private constructor(val address: String) {
    companion object {
        operator fun invoke(raw: String): Email {
            require("@" in raw) { "Invalid email" }
            return Email(raw.lowercase())
        }
    }
}
val e = Email("Test@Example.com")  // looks like a constructor

Fábrica abstrata com classes seladas

Combine métodos de fábrica com hierarquias de classes seladas para criar objetos tipados.
sealed class Shape {
    data class Circle(val r: Double) : Shape()
    data class Rect(val w: Double, val h: Double) : Shape()
    companion object {
        fun circle(r: Double) = Circle(r)
        fun rect(w: Double, h: Double) = Rect(w, h)
    }
}

Fábrica orientada a dependências

As fábricas podem aceitar dependências e conectá-las.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

Fábrica em testes

Os métodos de fábrica tornam a criação de objetos de teste limpa e explícita.
class Order private constructor(
    val id: Long, val items: List<String>, val paid: Boolean
) {
    companion object {
        fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
        fun paid(id: Long, items: List<String>) = Order(id, items, true)
    }
}

A partir de JSON/Config

As fábricas são pontos de entrada naturais para a análise.
class AppConfig private constructor(
    val baseUrl: String, val timeout: Int
) {
    companion object {
        fun fromEnv() = AppConfig(
            baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
            timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
        )
    }
}

Quando NOT usar um construtor privado

Não torne os construtores privados apenas por estilo. Use essa abordagem quando: for necessária validação, o armazenamento em cache for necessário ou diferentes caminhos de criação tiverem semânticas distintas.

Verificação rápida

Qual função de operador permite chamar um objeto companheiro como um construtor: Email("a@b.com")?

Recapitulação

Métodos de fábrica em objetos companheiros: construtor privado + fábricas nomeadas, retornos nulos opcionais, armazenamento em cache e invoke() para uma sintaxe semelhante à de construtor. As fábricas tornam a criação de objetos segura, expressiva e testável!

Perguntas Frequentes

A aula “Métodos de fábrica com companion object” é grátis?

Sim — o texto completo de “Métodos de fábrica com companion object” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Métodos de fábrica com companion object”?

Implemente padrões de fábrica usando companion object e o operador invoke. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Métodos de fábrica com companion object”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Declaração object: singletons do Kotlin
  2. companion object: membros semelhantes a estáticos no Kotlin
  3. Objetos anônimos e expressões de objeto
  4. Métodos de fábrica com companion object
← Voltar para Kotlin Academy