Middle
¿Cómo eliminar los cuatro constructores en la vista personalizada (CustomView)?
sobes.tech AI
Respuesta de la IA
Se puede utilizar el método de fábrica o el patrón builder en lugar de usar directamente los constructores.
-
Método de fábrica: Permite crear instancias de la vista, abstraer el proceso de creación y ocultar la lógica de selección del constructor necesario.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Constructor privado para forzar el uso de métodos de fábrica companion object { fun createDefault(context: Context): MyCustomView { // Lógica de inicialización para el constructor por defecto return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Lógica de inicialización con atributos return MyCustomView(context, attrs, 0, 0) } // Métodos de fábrica adicionales para otras combinaciones de constructores } } -
Patrón builder: Es útil cuando hay muchos constructores o tienen múltiples parámetros opcionales. Permite crear el objeto paso a paso.
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) { // Constructor 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 para crear e inicializar la vista basada en los parámetros return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Uso del Builder val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
La elección entre método de fábrica y patrón builder depende de la complejidad de la inicialización de la vista. Para casos más simples, los métodos de fábrica son suficientes. Para casos complejos con muchas opciones, es preferible usar builder.