Sobes.tech
Middle

Чӣ гуна бояд чор конструкторро дар намоиши фармоишӣ (CustomView) хориҷ кард?

sobes.tech AI

Ҷавоб аз AI

Мушкил нест, ки метавон аз методи фабрика ё pattern builder ба ҷои истифодаи мустақим аз конструкторҳо истифода кард.

  • Методи фабрика: Имкон медиҳад, ки намунаҳои намоишро эҷод кард, равандрои эҷодро абстраксия мекунад ва логикаи интихоби конструкторро пинҳон мекунад.

    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)
            }
    
            // Методҳои фабрикаи иловагӣ барои дигар омезишҳои конструкторҳо
        }
    }
    
  • Pattern builder: Ҳангоми зиёд будани конструкторҳо ё онҳо дорои бисёр параметрҳои интихобӣ муфид аст. Имкон медиҳад, ки объектро тадриҷан эҷод кард.

    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()
    

Интихоб байни методи фабрика ва pattern builder вобаста ба мураккабии оғоз кардани намоиш аст. Барои ҳолатҳои оддӣ, кифояи методҳои фабрика мебошад. Барои ҳолатҳои мураккаб бо бисёр имконот, беҳтар аст pattern builder.