Middle
Como eliminar os quatro construtores na visualização personalizada (CustomView)?
sobes.tech IA
Resposta da IA
Pode usar o método de fábrica ou o padrão builder em vez de usar diretamente os construtores.
-
Método de fábrica: Permite criar instâncias da vista, abstraindo o processo de criação e escondendo a lógica de seleção do construtor necessário.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Construtor privado para forçar o uso de métodos de fábrica companion object { fun createDefault(context: Context): MyCustomView { // Lógica de inicialização para o construtor padrão return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Lógica de inicialização com atributos return MyCustomView(context, attrs, 0, 0) } // Métodos de fábrica adicionais para outras combinações de construtores } } -
Padrão builder: É útil quando há muitos construtores ou eles têm múltiplos parâmetros opcionais. Permite criar o objeto passo a passo.
class MyCustomView private constructor( private val context: Context, private val attrs: AttributeSet?, private val defStyleAttr: Int, private val defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Construtor privado class Builder(private val context: Context) { private var attrs: AttributeSet? = null private var defStyleAttr: Int = 0 private var defStyleRes: Int = 0 fun setAttrs(attrs: AttributeSet?) = apply { this.attrs = attrs } fun setDefStyleAttr(defStyleAttr: Int) = apply { this.defStyleAttr = defStyleAttr } fun setDefStyleRes(defStyleRes: Int) = apply { this.defStyleRes = defStyleRes } fun build(): MyCustomView { // Lógica de criação e inicialização da vista com base nos parâmetros return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Uso do Builder val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
A escolha entre método de fábrica e padrão builder depende da complexidade da inicialização da vista. Para casos mais simples, os métodos de fábrica são suficientes. Para casos mais complexos com múltiplas opções, o padrão builder é preferível.