Middle
Ako odstrániť štyri konštruktory v vlastnom zobrazení (CustomView)?
sobes.tech AI
Odpoveď od AI
Môže sa použiť továrenská metóda alebo builder pattern namiesto priameho používania konštruktorov.
-
Továrenská metóda: Umožňuje vytváranie inštancií zobrazenia, abstrahuje proces vytvárania a skrýva logiku výberu potrebného konštruktora.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Súkromný konštruktor na nútené použitie továrenských metód companion object { fun createDefault(context: Context): MyCustomView { // Logika inicializácie pre predvolený konštruktor return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Logika inicializácie s atribútmi return MyCustomView(context, attrs, 0, 0) } // Ďalšie továrenské metódy pre iné kombinácie konštruktorov } } -
Builder pattern: Je užitočný, keď je veľa konštruktorov alebo majú veľa voliteľných parametrov. Umožňuje krok za krokom vytvárať objekt zobrazenia.
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) { // Súkromný konštruktor 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 { // Logika vytvárania a inicializácie zobrazenia na základe parametrov return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Použitie Buildera val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Voľba medzi továrenskou metódou a builder pattern závisí od zložitosti inicializácie zobrazenia. Pre jednoduchšie prípady postačia továrenské metódy. Pre zložitejšie s množstvom možností je vhodnejší builder.