Middle
Кастомдык көрүнүштөгү (CustomView) төрт куруучуну кантип жок кылуу керек?
sobes.tech AI
AIден жооп
Модельдик ыкма же builder pattern түзмө конструкторлорду колдонбоо үчүн колдонулушу мүмкүн:
-
Модельдик ыкма: Көрсөтүүнүн үлгүлөрүн түзүүгө мүмкүндүк берет, түзүү процесин абстракциялайт жана керектүү конструкторду тандоонун логикасын жашырат:
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Жеке конструктор, фабрика ыкмаларын колдонуу үчүн companion object { fun createDefault(context: Context): MyCustomView { // Дефолт конструктор үчүн баштапкы логика return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Атрибуттар менен баштапкы логика return MyCustomView(context, attrs, 0, 0) } // Башка конструкторлор үчүн фабрика ыкмалары } } -
Builder pattern: Эгер конструкторлор көп болсо же аларда көп опционалдуу параметрлер болсо, анда кадам-кадам объект түзүү үчүн пайдалуу:
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) { // Жеке конструктор 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 { // Түзүү жана баштоо логикасы return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Builder колдонуу val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Тандоо — фабрикалык ыкма же builder pattern, көрүнүштүн башталуу татаалдыгына жараша болот. Жөнөкөй учурларда фабрикалык ыкмалар жетиштүү, ал эми татаал жана көп опциялар менен — builder жакшы болот.