Middle
Kuidas eemaldada neli konstruktorit kohandatud vaates (CustomView)?
sobes.tech AI
Vastus AI-lt
Võib kasutada tehase meetodit või builder-mustrit otse konstruktorite asemel.
-
Tehase meetod: Võimaldab luua vaate eksemplare, abstraktsiooni loomise protsessi ja varjab vajaliku konstruktorivaliku loogika.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Privaatne konstruktor, et kasutada tehase meetodeid companion object { fun createDefault(context: Context): MyCustomView { // Algne loogika vaikekonstruktorile return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Loogika atribuutidega return MyCustomView(context, attrs, 0, 0) } // Täiendavad tehase meetodid teiste konstruktorite kombinatsioonide jaoks } } -
Builder muster: Kasulik, kui konstruktorite arv on suur või neil on palju valikulisi parameetreid. Võimaldab samm-sammult luua vaate objekti.
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) { // Privaatne 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 { // Loomise ja initsialiseerimise loogika return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Kasutamine builderiga val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Valik tehase meetodi ja builder pattern vahel sõltub vaate initsialiseerimise keerukusest. Lihtsamate juhtumite jaoks piisab tehase meetoditest, keerulisemate puhul eelistatakse builderit.