Middle
Ի՞նչ է Factory նախագծման ձևանմուշը և ինչպես է այն օգտագործվում օբյեկտների կառուցման (Builder) մեջ։
sobes.tech AI
Պատասխան AI-ից
Մոդելը Factory Method տրամադրում է ինտերֆեյս օբյեկտների ստեղծման համար հիմնական դասում, թույլ տալով ենթակլասներին փոխել ստեղծվող օբյեկտների տիպը: ConcreteFactory որոշում է, թե որ ConcreteProduct-ը ստեղծել:
Builder-ը բաժանում է բարդ օբյեկտի կառուցումը նրա ներկայացումից: Այն թույլ է տալիս կառուցել օբյեկտը քայլ առ քայլ, տրամադրելով տարբեր մեթոդներ նրա հատկությունները սահմանելու համար և վերադարձնելով պատրաստ օբյեկտը: Օգտագործվում է, երբ օբյեկտը ունի բազմաթիվ ընտրովի պարամետրեր և նրա ստեղծումը պահանջում է բարդ տրամաբանություն:
Ֆաբրիկան ամբողջական օբյեկտներ է ստեղծում, իսկ Tərtibçi-ն դրանք կառուցում է մասերի:
Օրինակ:
// 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 կոճակի ռենդեր")
}
override fun onClick() {
println("Կոճակի վրա սեղմում Windows")
}
}
class HTMLButton : Button {
override fun render() {
println("HTML կոճակի ռենդեր")
}
override fun onClick() {
println("Կոճակի վրա սեղմում HTML")
}
}
// 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 = "միջին",
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-ի օգտագործում
val pizza = Pizza.Builder()
.size("մեծ")
.cheese(true)
.pepperoni(true)
.build()
println(pizza)
Համեմատություն:
| Գծագրություն | Factory Method | Builder |
|---|---|---|
| Նպատակը | Օբյեկտների ստեղծում ենթակլասների միջոցով. | Կոմպլեքս օբյեկտների աստիճանաբար ստեղծում. |
| Օբյեկտի բարդություն | Հաճախ պարզ օբյեկտներ. | Բարդ օբյեկտներ բազմաթիվ պարամետրերով. |
| Ստեղծման ճկունություն | Տիպի ընտրություն ենթակլասի վրա հիմնված. | Օբյեկտի հատկությունների աստիճանային կարգավորում. |
| Օբյեկտի վերադարձ | Գործնական օբյեկտ է վերադարձնում. | Ստեղծումից հետո պատրաստ օբյեկտ է վերադարձնում. |
| Դիմում | Ֆրեյմվորկներ, գրադարաններ, որտեղ օբյեկտի տիպը հայտնի չէ կոմպիլյացիայի ժամանակ. | Օբյեկտներ շատ ընտրովի պարամետրերով. |