Middle
Kako ukloniti četiri konstruktora u prilagođenom prikazu (CustomView)?
sobes.tech АИ
Одговор од АИ
Може се користити фабрички метод или 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.