Middle
Xüsusi Baxışda (CustomView) dördüntürbəni necə aradan qaldırmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
İstədiyiniz halda, birbaşa konstruktorlardan istifadə etmək yerinə fabriki metodu və ya builder pattern istifadə edə bilərsiniz.
-
Fabriki metodu: Görünüm nümunələri yaratmağa imkan verir, yaradılma prosesini abstraktlaşdırır və lazım olan konstruktorun seçilməsi məntiqini gizlədir.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Fabriki metodların istifadəsini məcbur etmək üçün xüsusi konstruktor companion object { fun createDefault(context: Context): MyCustomView { // Default konstruktor üçün başlanğıc məntiqi return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // atributlarla başlanğıc məntiqi return MyCustomView(context, attrs, 0, 0) } // Digər fabrik metodlar digər konstruktor kombinasyonları üçün } } -
Builder pattern: Bu, çox sayda konstruktor və ya çox sayda opsional parametr olduqda faydalıdır. Objekti addım-addım yaratmağa imkan verir.
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) { // Xüsusi 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 { // Parametrlərə əsasən görünüşü yaratmaq və başlatmaq məntiqi return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Builder-dən istifadə val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Fabriki metodu və builder pattern arasındakı seçim, görünüşün başlanğıcının mürəkkəbliyinə bağlıdır. Daha sadə hallarda, fabrik metodları kifayət edir. Çox sayda seçim olan mürəkkəb hallarda isə, builder üstünlük təşkil edir.