Sobes.tech
Middle

Factory tasarım deseni nedir ve nesne inşasında (Builder) nasıl kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Factory Method deseni, temel sınıfta nesneler oluşturmak için bir arayüz sağlar ve alt sınıfların oluşturulan nesne türünü değiştirmesine izin verir. ConcreteFactory, hangi ConcreteProduct'ın oluşturulacağını belirler.

Builder, karmaşık bir nesnenin yapımını temsilinden ayırır. Nesneyi adım adım oluşturmayı sağlar, özelliklerini ayarlamak için çeşitli yöntemler sunar ve hazır nesneyi döner. Çok sayıda isteğe bağlı parametreye sahip nesnelerin ve karmaşık mantık gerektiren yapımların kullanıldığı durumlarda tercih edilir.

Fabrika, nesneleri tamamen oluştururken, Yapıcı onları parça parça oluşturur.

Örnek:

// Factory Method
interface Dialog {
    fun createButton(): Button
    fun render() {
        val okButton = createButton()
        okButton.render()
    }
}

class WindowsDialog : Dialog {
    override fun createButton(): Button {
        return WindowsButton()
    }
}

class WebDialog : Dialog {
    override fun createButton(): Button {
        return HTMLButton()
    }
}

interface Button {
    fun render()
    fun onClick()
}

class WindowsButton : Button {
    override fun render() {
        println("Windows düğmesi render ediliyor")
    }

    override fun onClick() {
        println("Windows düğmesine tıklandı")
    }
}

class HTMLButton : Button {
    override fun render() {
        println("HTML düğmesi render ediliyor")
    }

    override fun onClick() {
        println("HTML düğmesine tıklandı")
    }
}

// Builder
class Pizza private constructor(
    private val size: String,
    private val cheese: Boolean,
    private val pepperoni: Boolean,
    private val mushrooms: Boolean
) {
    data class Builder(
        var size: String = "medium",
        var cheese: Boolean = false,
        var pepperoni: Boolean = false,
        var mushrooms: Boolean = false
    ) {
        fun size(size: String) = apply { this.size = size }
        fun cheese(cheese: Boolean) = apply { this.cheese = cheese }
        fun pepperoni(pepperoni: Boolean) = apply { this.pepperoni = pepperoni }
        fun mushrooms(mushrooms: Boolean) = apply { this.mushrooms = mushrooms }
        fun build() = Pizza(size, cheese, pepperoni, mushrooms)
    }

    override fun toString(): String {
        return "Pizza(size='$size', cheese=$cheese, pepperoni=$pepperoni, mushrooms=$mushrooms)"
    }
}

// Builder kullanımı
val pizza = Pizza.Builder()
    .size("large")
    .cheese(true)
    .pepperoni(true)
    .build()

println(pizza)

Karşılaştırma:

Özellikler Factory Method Builder
Amaç Alt sınıflarda arayüzler aracılığıyla nesne oluşturma. Karmaşık nesnelerin aşamalı oluşturulması.
Nesne karmaşıklığı Genellikle basit nesneler. Çok parametreli karmaşık nesneler.
Oluşum esnekliği Nesne türü, alt sınıfa bağlı olarak seçilir. Nesne özelliklerinin adım adım ayarlanması.
Nesne dönüşü Hazır nesne döner. Oluşum tamamlandıktan sonra nesne döner.
Uygulama alanları Çerçeve ve kütüphanelerde, nesne tipi derleme zamanında bilinmiyorsa. Çok sayıda isteğe bağlı parametre içeren nesneler.