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.