Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Go Design Corak #Kilang

Go Design Corak #Kilang

Susan Sarandon
Susan Sarandonasal
2024-10-12 06:11:02209semak imbas

Go Design Patterns #Factory

Kaedah Kilang

Kaedah Kilang ialah corak reka bentuk ciptaan yang menyediakan antara muka untuk mencipta objek, tetapi membenarkan subkelas mengubah jenis objek yang akan dicipta. Daripada membuat seketika objek menggunakan baharu, Kaedah Kilang menyerahkan tanggungjawab penciptaan objek kepada subkelas atau kaedah, menggalakkan fleksibiliti dan skalabiliti.

Pernyataan Masalah

Apabila terdapat keperluan untuk mencipta objek, tetapi anda tidak tahu terlebih dahulu kelas sebenar objek yang akan diperlukan. Aplikasi ini perlu mengendalikan pelbagai jenis objek yang berkongsi tingkah laku biasa tetapi berbeza dalam pelaksanaannya. Selain itu, anda ingin mengelak daripada mengubah suai kod anda setiap kali jenis objek baharu ditambahkan atau apabila cara objek dicipta berubah.

Masalah Khusus Ia Selesai

  • Penciptaan objek yang kompleks: Menghasilkan kelas secara langsung boleh mengikat kod anda dengan pelaksanaan tertentu, menjadikannya tegar dan sukar untuk dikekalkan.

  • Penciptaan objek dinamik: Dalam banyak kes, jenis objek yang diperlukan mungkin tidak diketahui sehingga masa jalan dan keputusan ini harus fleksibel.

  • Encapsulation of instantiation: Logik penciptaan objek harus diasingkan daripada kod klien, jadi perubahan dalam cara objek dicipta tidak menjejaskan seluruh sistem.

  • Skalabiliti: Apabila anda perlu menambah jenis produk baharu (objek), anda mahukan penyelesaian berskala yang mengelakkan pengubahsuaian kod sedia ada.

Contoh Dunia Nyata

Bayangkan sebuah kilang kereta tempat anda membuat pesanan untuk kereta, tetapi bergantung pada pilihan anda (cth., elektrik atau gas), kilang itu memasang dan menyediakan anda jenis kereta yang sesuai. Pelanggan tidak perlu mengetahui butiran khusus pemasangan kereta—mereka hanya menerima produk.

Perlaksanaan

package main

import (
    "fmt"
    "os"
)

// Step 1: Define the Product Interface
type Car interface {
    Drive() string
    FuelType() string
}

// Step 2: Concrete Products (Electric Car and Gas Car)
type ElectricCar struct{}

func (e *ElectricCar) Drive() string {
    return "Driving an electric car"
}

func (e *ElectricCar) FuelType() string {
    return "Powered by electricity"
}

type GasCar struct{}

func (g *GasCar) Drive() string {
    return "Driving a gas-powered car"
}

func (g *GasCar) FuelType() string {
    return "Powered by gasoline"
}

// Step 3: Define the Factory Interface
type CarFactory interface {
    CreateCar(brand string) Car
}

type carFactory struct{}

func (carFactory *carFactory) CreateCar() Car {
    carPreference := os.Getenv("CAR_PREFERENCE")

    if carPreference == "electric" {
        return &ElectricCar{}
    }

    // here we just instantiate the struct, but you could also 
    // have another functions to help create the object if it's complex
    return &GasCar{}
}

// Step 4: Client Code
func main() {
    // Client uses the factory to create objects
    carFactory := carFactory{}

    // Creating a Gas Car
    gasCar := carFactory.CreateCar()
    fmt.Println(gasCar.Drive())    // Output: Driving a gas-powered car
    fmt.Println(gasCar.FuelType()) // Output: Powered by gasoline

    // Creating an Electric Car
    os.Setenv("CAR_PREFERENCE", "electric")
    electricCar := carFactory.CreateCar()
    fmt.Println(electricCar.Drive())    // Output: Driving an electric car
    fmt.Println(electricCar.FuelType()) // Output: Powered by electricity
}

Antara Muka Produk: Mentakrifkan antara muka biasa (Kereta) dengan kaedah Drive() dan FuelType().

Produk Konkrit: Melaksanakan antara muka dengan kelas tertentu (ElectricCar, GasCar) yang menentukan tingkah laku mereka.

Antara Muka Kilang: Menentukan kaedah (CreateCar()) untuk mencipta objek Kereta.

Logik Kilang: Kilang menentukan jenis kereta yang hendak dibuat berdasarkan pilihan pelanggan. Ini ditunjukkan di sini dengan menggunakan pembolehubah persekitaran, tetapi ia boleh berdasarkan mana-mana logik.

Kod Pelanggan: Meminta kereta dari kilang tanpa mengetahui butiran penciptaan, menggunakan objek yang dikembalikan melalui antara muka biasa.

Atas ialah kandungan terperinci Go Design Corak #Kilang. 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