Middle
Kā noņemt četrus konstruktorus pielāgotajā skatījumā (CustomView)?
sobes.tech AI
Atbilde no AI
Var būt izmantota rūpnīcas metode vai builder pattern vietā tieši izmantojot konstruktorus.
-
Rūpnīcas metode: Atļauj izveidot skata piemērus, abstraktē izveides procesu un slēpj nepieciešamā konstruktoru izvēles loģiku.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Privāts konstruktoru, lai izmantotu rūpnīcas metodes companion object { fun createDefault(context: Context): MyCustomView { // Sākotnējā loģika noklusējuma konstruktoram return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Loģika ar atribūtiem return MyCustomView(context, attrs, 0, 0) } // Papildu rūpnīcas metodes citiem konstruktoru kombinācijām } } -
Builder pattern: Noder, ja ir daudz konstruktoru vai tie satur daudz izvēles parametrus. Ļauj pakāpeniski veidot skata objektu.
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āts konstruktoru 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 { // Izveides un inicializācijas loģika return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Lietošana ar builder val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Izvēle starp rūpnīcas metodi un builder pattern ir atkarīga no skata inicializācijas sarežģītības. Vienkāršākiem gadījumiem pietiek ar rūpnīcas metodēm, bet sarežģītākiem — ar builder.