Sobes.tech
Middle

Дар бораи намунаи тарҳрезии 'Сохтмончӣ' нақл кунед.

sobes.tech AI

Ҷавоб аз AI

Паттерн дизайни "Бунёдкор" (Builder) — это паттерн тавлидкунанда, ки имкон медиҳад, ки объектҳои мураккаб ба қадамҳо сохта шаванд. Вай равандрои сохтани объектҳои мураккаб аз намоиши онҳо ҷудо мекунад, то ки ҳамин раванд метавонад намоишҳои гуногунро эҷод кунад.

Компонентҳои асосӣ:

  • Бунёдкор (Builder): Интерфейс ё синфи абстрактӣ, ки усулҳоро барои сохтани қисмҳои объектҳои мураккаб муайян мекунад.
  • Бунёдкори мушаххас (Concrete Builder): Интерфейси Бунёдкорро иҷро мекунад ва барои сохтани қисмҳои объект нақшаи мушаххас медиҳад. Вай натиҷаи миёнаро нигоҳ медорад ва усули гирифтани объект тайёрро медиҳад.
  • Директори (Director): Компоненти ихтиёрӣ. Равандрои даъвати усулҳои бунёдкор барои сохтани объект муайян мекунад. Дар бораи бунёдкорони мушаххас намедонад.
  • Маҳсулот (Product): Объекти мураккаб, ки бунёдкор месозад.

Барнома:

  • Вақте ки равандсозии объект мураккаб аст ва чанд қадами ихтиёриро дарбар мегирад.
  • Вақте ки лозим аст, намоишҳои гуногуни як объектро бо истифода аз ҳамин равандсозӣ эҷод кардан.
  • Вақте ки конструктори объект дорои шумораи зиёди параметрҳо мебошад.

Маслиҳат дар Go:

// Маҳсулот - объект мураккаб
type Product struct {
	PartA string
	PartB string
	PartC string
}

// Бунёдкор - интерфейс
type Builder interface {
	BuildPartA()
	BuildPartB()
	BuildPartC()
	GetProduct() *Product
}

// Бунёдкори мушаххас
type ConcreteBuilder struct {
	product *Product
}

func NewConcreteBuilder() *ConcreteBuilder {
	return &ConcreteBuilder{product: &Product{}}
}

func (cb *ConcreteBuilder) BuildPartA() {
	cb.product.PartA = "Қисми А сохта шуд"
}

func (cb *ConcreteBuilder) BuildPartB() {
	cb.product.PartB = "Қисми B сохта шуд"
}

func (cb *ConcreteBuilder) BuildPartC() {
	cb.product.PartC = "Қисми C сохта шуд"
}

func (cb *ConcreteBuilder) GetProduct() *Product {
	return cb.product
}

// Директори - ихтиёрӣ)
type Director struct {
	builder Builder
}

func NewDirector(builder Builder) *Director {
	return &Director{builder: builder}
}

func (d *Director) Construct() {
	d.builder.BuildPartA()
	d.builder.BuildPartB()
	d.builder.BuildPartC()
}

// Истифода
// concreteBuilder := NewConcreteBuilder()
// director := NewDirector(concreteBuilder)
// director.Construct()
// product := concreteBuilder.GetProduct()
// fmt.Printf("Маҳсулоти сохташуда: %+v\n", product)

Фоидаҳо:

  • Кодрои сохтани объектро аз коди муштарӣ ҷудо мекунад.
  • Имкон медиҳад, ки намоиши дохилии маҳсулотро бидуни тағир додани коди муштарӣ тағир дод.
  • Қадам ба қадам сохтани объектро имкон медиҳад.
  • Сохтани объектҳои бо шумораи зиёди параметрҳоро осон мекунад.

Норасоиҳо:

  • Баъзе синфҳо/интерфейсҳоро барои сохтани объект зиёд мекунад.
  • Барои объектҳои оддӣ метавонад зиёдатӣ бошад.