Middle
Maxsus ko'rinishda (CustomView) to'rt quruvchini qanday olib tashlash mumkin?
sobes.tech AI
AIdan javob
Fabrika usul yoki builder pattern ni to'g'ridan-to'g'ri konstruktorlardan foydalanish o'rniga ishlatish mumkin.
-
Fabrika usuli: Bu, ko'rinish nusxalarini yaratishga imkon beradi, yaratish jarayonini abstraktsiyalash va kerakli konstruktorni tanlash mantiqini yashirish.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Maxfiy konstruktor, fabrik metodlaridan foydalanishni majburiy qilish uchun companion object { fun createDefault(context: Context): MyCustomView { // Standart konstruktor uchun boshlang'ich mantiq return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // atributlar bilan boshlang'ich mantiq return MyCustomView(context, attrs, 0, 0) } // Boshqa konstruktor kombinatsiyalari uchun fabrik metodlar } } -
Builder pattern: Bu, agar ko'plab konstruktorlar yoki ko'p miqdordagi ixtiyoriy parametrlar bo'lsa, foydalidir. Ob'ektni bosqichma-bosqich yaratishga imkon beradi.
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) { // Maxfiy 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 { // Mantiqiy yaratish va boshlash return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Builderdan foydalanish val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Fabrik metod va builder pattern o'rtasidagi tanlov, ko'rinishni boshlashning murakkabligiga bog'liq. Oddiy holatlar uchun fabrik metodlar etarli. Murakkab holatlar uchun, ko'p variantli bo'lsa, builder afzallik beradi.