Middle
Factory dizayn nümunəsi nədir və obyektlərin qurulmasında (Builder) necə istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Factory Method nümunəsi əsas sinifdə obyektlərin yaradılması üçün interfeys təqdim edir və alt siniflərin yaradılan obyektlərin növünü dəyişməsinə imkan verir. ConcreteFactory hansı ConcreteProduct-in yaradılacağını müəyyən edir.
Builder mürəkkəb obyektin qurulmasını onun təqdimatından ayırır. O, obyektin mərhələli şəkildə yaradılmasına imkan verir və onun xüsusiyyətlərini təyin etmək üçün müxtəlif metodlar təqdim edir və hazır obyekt qaytarır. Bu, obyektin çox sayda qeyri-zəruri parametri və onun yaradılmasının mürəkkəb məntiq tələb etdiyi zaman istifadə olunur.
Fabrika obyektləri tam şəkildə yaradır, və Tərtibçi isə onları hissələrə ayırır.
Misal:
// 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üyməsini göstərir")
}
override fun onClick() {
println("Windows düyməsinə klikləyir")
}
}
class HTMLButton : Button {
override fun render() {
println("HTML düyməsini göstərir")
}
override fun onClick() {
println("HTML düyməsinə klikləyir")
}
}
// 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 = "orta",
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-dən istifadə
val pizza = Pizza.Builder()
.size("böyük")
.cheese(true)
.pepperoni(true)
.build()
println(pizza)
Müqayisə:
| Xüsusiyyətlər | Factory Method | Builder |
|---|---|---|
| Təyinat | Alt siniflər vasitəsilə obyektlərin yaradılması. | Çətin obyektlərin mərhələli yaradılması. |
| Obyektin mürəkkəbliyi | Adətən sadə obyektlər. | Çox parametri olan mürəkkəb obyektlər. |
| Yaradılma elastikliyi | Obyekt növünün seçimi alt sinifə görə. | Obeyektin xüsusiyyətlərinin mərhələli tənzimlənməsi. |
| Obyektin qaytarılması | Hazır obyekt qaytarır. | Yaradılma tamamlandıqdan sonra hazır obyekt qaytarır. |
| Tətbiq sahəsi | Çərçivələr, kitabxanalar, obyekt növü məlum olmayan yerlər | Çox sayda qeyri-zəruri parametri olan obyektlər. |