Sobes.tech
Middle

Wie entfernt man die vier Konstruktoren in der benutzerdefinierten Ansicht (CustomView)?

sobes.tech KI

Antwort von AI

Sie können die Fabrikmethode oder das Builder-Muster anstelle der direkten Verwendung von Konstruktoren verwenden.

  • Fabrikmethode: Ermöglicht die Erstellung von Instanzen der Ansicht, indem der Erstellungsprozess abstrahiert und die Logik zur Auswahl des benötigten Konstruktors verborgen wird.

    class MyCustomView private constructor(
        context: Context,
        attrs: AttributeSet?,
        defStyleAttr: Int,
        defStyleRes: Int
    ) : View(context, attrs, defStyleAttr, defStyleRes) {
    
        // Privater Konstruktor, um die Verwendung von Fabrikmethoden zu erzwingen
    
        companion object {
            fun createDefault(context: Context): MyCustomView {
                // Initialisierungslogik für den Standardkonstruktor
                return MyCustomView(context, null, 0, 0)
            }
    
            fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView {
                // Initialisierungslogik mit Attributen
                return MyCustomView(context, attrs, 0, 0)
            }
    
            // Zusätzliche Fabrikmethoden für andere Konstruktor-Kombinationen
        }
    }
    
  • Builder-Muster: Ist nützlich, wenn es viele Konstruktoren gibt oder sie viele optionale Parameter haben. Ermöglicht die schrittweise Erstellung des Objekts.

    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) {
    
        // Privater Konstruktor
    
        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 {
                // Logik zur Erstellung und Initialisierung der Ansicht basierend auf den Parametern
                return MyCustomView(context, attrs, defStyleAttr, defStyleRes)
            }
        }
    }
    
    // Verwendung des Builders
    val myView = MyCustomView.Builder(context)
        .setAttrs(attrs)
        .build()
    

Die Wahl zwischen Fabrikmethode und Builder-Muster hängt von der Komplexität der Initialisierung der Ansicht ab. Für einfachere Fälle reichen Fabrikmethoden aus. Für komplexe mit vielen Optionen ist das Builder-Muster vorzuziehen.