Middle
Hoe verwijder je de vier constructors in de aangepaste weergave (CustomView)?
sobes.tech AI
Antwoord van AI
Je kunt de fabriekmethode of het builder-patroon gebruiken in plaats van direct gebruik te maken van constructeurs.
-
Fabriekmethode: Maakt het mogelijk om instanties van de weergave te maken, door het creatieproces te abstraheren en de logica voor het kiezen van de juiste constructor te verbergen.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Privé constructor om het gebruik van fabrieksmethoden af te dwingen companion object { fun createDefault(context: Context): MyCustomView { // Initialisatiemethode voor de standaardconstructor return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Initialisatie met attributen return MyCustomView(context, attrs, 0, 0) } // Extra fabrieksmethoden voor andere constructorcombinaties } } -
Builder-patroon: Handig wanneer er veel constructors zijn of ze veel optionele parameters hebben. Maakt het mogelijk om het object stapsgewijs te maken.
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) { // Privé constructor 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 { // Logica om de view te maken en te initialiseren op basis van de parameters return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Gebruik van de builder val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
De keuze tussen fabrieksmethode en builder-patroon hangt af van de complexiteit van de initialisatie van de view. Voor eenvoudigere gevallen zijn fabrieksmethoden voldoende. Voor complexere gevallen met veel opties is het builder-patroon aan te bevelen.