Sobes.tech
Middle

Comment supprimer les quatre constructeurs dans la vue personnalisée (CustomView) ?

sobes.tech IA

Réponse de l'IA

Vous pouvez utiliser la méthode de fabrique ou le pattern builder au lieu d'utiliser directement les constructeurs.

  • Méthode de fabrique : Permet de créer des instances de la vue, en abstraisant le processus de création et en cachant la logique de sélection du constructeur approprié.

    class MyCustomView private constructor(
        context: Context,
        attrs: AttributeSet?,
        defStyleAttr: Int,
        defStyleRes: Int
    ) : View(context, attrs, defStyleAttr, defStyleRes) {
    
        // Constructeur privé pour forcer l'utilisation des méthodes de fabrique
    
        companion object {
            fun createDefault(context: Context): MyCustomView {
                // Logique d'initialisation pour le constructeur par défaut
                return MyCustomView(context, null, 0, 0)
            }
    
            fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView {
                // Logique d'initialisation avec attributs
                return MyCustomView(context, attrs, 0, 0)
            }
    
            // Méthodes de fabrique supplémentaires pour d'autres combinaisons de constructeurs
        }
    }
    
  • Pattern builder : Utile lorsque plusieurs constructeurs existent ou qu'ils ont de nombreux paramètres optionnels. Permet de créer l'objet étape par étape.

    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) {
    
        // Constructeur privé
    
        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 {
                // Logique de création et d'initialisation de la vue en fonction des paramètres
                return MyCustomView(context, attrs, defStyleAttr, defStyleRes)
            }
        }
    }
    
    // Utilisation du Builder
    val myView = MyCustomView.Builder(context)
        .setAttrs(attrs)
        .build()
    

Le choix entre méthode de fabrique et pattern builder dépend de la complexité de l'initialisation de la vue. Pour des cas plus simples, les méthodes de fabrique suffisent. Pour des cas complexes avec de nombreuses options, le pattern builder est préférable.