Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Corak Reka Bentuk Pembina

Corak Reka Bentuk Pembina

WBOY
WBOYasal
2024-07-16 17:03:40470semak imbas

Builder Design Pattern

Corak reka bentuk Builder digunakan untuk membina objek kompleks secara berperingkat, membenarkan penciptaan perwakilan berbeza objek menggunakan proses pembinaan yang sama. Dalam artikel ini, kami akan meneroka cara melaksanakan corak Pembina di Golang, memahami faedahnya dan menganalisis contoh praktikal penggunaan.

Apa itu Builder?

Corak Builder memisahkan pembinaan objek kompleks daripada perwakilannya, membenarkan proses pembinaan yang sama mencipta representasi yang berbeza. Ini amat berguna apabila objek perlu dibuat dalam berbilang langkah atau dengan berbilang konfigurasi yang mungkin.

Faedah Pembina

  • Pemisahan Pembinaan dan Perwakilan: Membenarkan pembinaan objek diasingkan daripada perwakilan terakhirnya.
  • Pembinaan Bertambah: Membenarkan pembinaan objek kompleks secara berperingkat dan langkah demi langkah.
  • Guna Semula Kod: Memudahkan penggunaan semula kod dengan mentakrifkan langkah binaan biasa yang boleh digabungkan dalam pelbagai cara.

Melaksanakan Pembina

Untuk melaksanakan Pembina kami, mari bayangkan objek yang kompleks di mana ia akan diperlukan untuk memulakan beberapa medan dan juga objek berkumpulan yang lain. Bagaimana pula dengan sebuah Rumah? Di mana kami akan mempunyai dua jenis pembinaan, yang konvensional di mana konkrit dan bata akan digunakan, dan yang kedua diperbuat daripada kayu.

1 - Mentakrifkan Struktur

Pertama, kita perlu menentukan struktur objek yang ingin kita bina. Seperti yang dikatakan sebelum ini, kami akan membina sebuah rumah. Di dalam Struktur ini kami akan meletakkan apa yang perlu untuk menciptanya.

// house.go

package main

type House struct {
    Foundation string
    Structure  string
    Roof       string
    Interior   string
}

2 - Menentukan Antara Muka Pembina

Masih dalam fail yang sama, kami akan mentakrifkan antara muka Pembina kami yang menentukan kaedah yang diperlukan untuk membina bahagian lain Rumah.

//house.go

package main

type House struct {
    Foundation string
    Structure  string
    Roof       string
    Interior   string
}

type HouseBuilder interface {
    SetFoundation()
    SetStructure()
    SetRoof()
    SetInterior()
    GetHouse() House
}

3 - Melaksanakan Pembina secara konkrit

Jom buat dua fail baharu, concreteHouse dan woodHouse. Ia akan menjadi pelaksanaan kelas konkrit yang mengikuti antara muka HouseBuilder.

//concreteHouse.go

package main

type ConcreteHouseBuilder struct {
    house House
}

func (b *ConcreteHouseBuilder) SetFoundation() {
    b.house.Foundation = "Concrete, brick, and stone"
}

func (b *ConcreteHouseBuilder) SetStructure() {
    b.house.Structure = "Wood and brick"
}

func (b *ConcreteHouseBuilder) SetRoof() {
    b.house.Roof = "Concrete and reinforced steel"
}

func (b *ConcreteHouseBuilder) SetInterior() {
    b.house.Interior = "Gypsum board, plywood, and paint"
}

func (b *ConcreteHouseBuilder) GetHouse() House {
    return b.house
}
//woodHouse.go

package main

type WoodHouseBuilder struct {
    house House
}

func (b *WoodHouseBuilder) SetFoundation() {
    b.house.Foundation = "Wooden piles"
}

func (b *WoodHouseBuilder) SetStructure() {
    b.house.Structure = "Wooden frame"
}

func (b *WoodHouseBuilder) SetRoof() {
    b.house.Roof = "Wooden shingles"
}

func (b *WoodHouseBuilder) SetInterior() {
    b.house.Interior = "Wooden panels and paint"
}

func (b *WoodHouseBuilder) GetHouse() House {
    return b.house
}

4 - Mentakrifkan Pengarah

Pengarah ialah kelas yang menguruskan pembinaan objek, memastikan langkah pembinaan dipanggil mengikut susunan yang betul. Ia tidak mengetahui apa-apa tentang butiran pelaksanaan Builder tertentu, ia hanya memanggil kaedah Builder dalam urutan logik untuk mencipta produk akhir.

//director.go

package main

type Director struct {
    builder HouseBuilder
}

func (d *Director) Build() {
    d.builder.SetFoundation()
    d.builder.SetStructure()
    d.builder.SetRoof()
    d.builder.SetInterior()
}

func (d *Director) SetBuilder(b HouseBuilder) {
    d.builder = b
}

5 - Menggunakan Pembina

Akhir sekali, kami akan menggunakan Pengarah dan Pembina konkrit untuk membina pelbagai jenis rumah.

//main.go

package main

import (
    "fmt"
)

func main() {
    cb := &builder.ConcreteHouseBuilder{}
    director := builder.Director{Builder: cb}

    director.Build()
    concreteHouse := cb.GetHouse()

    fmt.Println("Concrete House")
    fmt.Println("Foundation:", concreteHouse.Foundation)
    fmt.Println("Structure:", concreteHouse.Structure)
    fmt.Println("Roof:", concreteHouse.Roof)
    fmt.Println("Interior:", concreteHouse.Interior)
    fmt.Println("-------------------------------------------")

    wb := &builder.WoodHouseBuilder{}
    director.SetBuilder(wb)

    director.Build()
    woodHouse := wb.GetHouse()

    fmt.Println("Wood House")
    fmt.Println("Foundation:", woodHouse.Foundation)
    fmt.Println("Structure:", woodHouse.Structure)
    fmt.Println("Roof:", woodHouse.Roof)
    fmt.Println("Interior:", woodHouse.Interior)
}

Pendek kata

  1. Struct House: Mewakili produk akhir yang sedang kami bina.
  2. Antara Muka Pembina Rumah: Mentakrifkan kaedah untuk membina bahagian rumah yang berlainan.
  3. Pelaksanaan Konkrit (ConcreteHouseBuilder dan WoodHouseBuilder): Laksanakan antara muka HouseBuilder dan tentukan langkah pembinaan khusus.
  4. Pengarah: Mengurus proses pembinaan, memastikan langkah-langkah dipanggil dalam susunan yang betul.
  5. Fungsi utama: Menunjukkan penggunaan corak Pembina untuk membina pelbagai jenis rumah, memanggil Pengarah untuk menguruskan proses dan mendapatkan produk akhir.

Kesimpulan

Corak Pembina ialah alat untuk membina objek kompleks dengan cara yang bertambah dan fleksibel. Di Golang, pelaksanaan corak ini adalah langsung dan berkesan, membolehkan penciptaan sistem modular dan mudah diselenggara. Dengan menggunakan antara muka dan kelas konkrit, kami boleh memusatkan logik pembinaan dan memudahkan evolusi kod apabila keperluan baharu muncul.

Atas ialah kandungan terperinci Corak Reka Bentuk Pembina. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn