Middle
Özelleştirilmiş görünümde (CustomView) dört yapıcıdan nasıl kurtulursunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Yapılandırıcıları doğrudan kullanmak yerine fabrika yöntemi veya builder deseni kullanılabilir.
-
Fabrika yöntemi: Görüntü örnekleri oluşturmayı sağlar, oluşturma sürecini soyutlar ve gerekli yapıcıyı seçme mantığını gizler.
class MyCustomView private constructor( context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int ) : View(context, attrs, defStyleAttr, defStyleRes) { // Fabrika yöntemlerini zorunlu kılmak için özel yapıcı companion object { fun createDefault(context: Context): MyCustomView { // Varsayılan yapıcı için başlatma mantığı return MyCustomView(context, null, 0, 0) } fun createFromAttrs(context: Context, attrs: AttributeSet?): MyCustomView { // Özelliklerle başlatma mantığı return MyCustomView(context, attrs, 0, 0) } // Diğer yapıcı kombinasyonları için ek fabrika yöntemleri } } -
Builder deseni: Birden fazla yapıcı veya çok sayıda isteğe bağlı parametre olduğunda faydalıdır. Nesneyi adım adım oluşturmayı sağlar.
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) { // Özel yapıcı 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 { // Parametrelere göre görüntü oluşturma ve başlatma mantığı return MyCustomView(context, attrs, defStyleAttr, defStyleRes) } } } // Builder kullanımı val myView = MyCustomView.Builder(context) .setAttrs(attrs) .build()
Fabrika yöntemi ile builder deseni arasındaki seçim, görüntü başlatmanın karmaşıklığına bağlıdır. Daha basit durumlar için fabrika yöntemleri yeterlidir. Çok sayıda seçenek içeren karmaşık durumlar için builder tercih edilmelidir.