Middle
Kaip pašalinti keturis konstruktorius pritaikytame vaizde (CustomView)?
sobes.tech AI
Atsakymas iš AI
Gali būti naudojamas gamyklos metodas arba builder pattern vietoj tiesioginių konstruktorių.
-
Gamyklos metodas: Leidžia kurti vaizdo pavyzdžius, abstrakčiuoja kūrimo procesą ir slepia logiką, kaip pasirenkamas reikalingas konstruktorius.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Privatūs konstruktorius, skirti naudoti gamyklos metodus companion object { fun createDefault(context: Context): MyCustomView { // Pradinė logika numatytam konstruktoriui return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Logika su atributais return MyCustomView(context, attrs, 0, 0) } // Papildomi gamyklos metodai kitoms konstruktorių kombinacijoms } } -
Builder pattern: Naudingas, kai yra daug konstruktorių arba jie turi daug pasirinktinių parametrų. Leidžia žingsnis po žingsnio kurti vaizdo objektą.
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) { // Privatūs konstruktorius 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 { // Kurimo ir inicializacijos logika return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Naudojimas builder val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Pasirinkimas tarp gamyklos metodo ir builder pattern priklauso nuo vaizdo inicializacijos sudėtingumo. Paprastiems atvejams pakanka gamyklos metodų, o sudėtingesniems — builder.