Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Corak reka bentuk penutupan dalam projek Golang

Corak reka bentuk penutupan dalam projek Golang

王林
王林asal
2024-04-16 16:33:02547semak imbas

Penutupan ialah teknik yang mengikat fungsi kepada persekitaran berubah-ubah yang diaksesnya. Di Golang, ia digunakan secara meluas dalam corak reka bentuk seperti: Corak kilang: merangkum kaedah kilang dan data peribadi untuk mencipta jenis objek tertentu. Corak strategi: Merangkum kaedah strategi dan data peribadi untuk bertukar antara algoritma. Corak pemerhati: Merangkum kaedah pemerhati dan data peribadi untuk melanggan peristiwa objek lain.

Corak reka bentuk penutupan dalam projek Golang

Corak reka bentuk penutupan dalam projek Golang

Pengenalan

Penutupan ialah teknik yang berkuasa untuk mengikat fungsi dan pembolehubah yang diaksesnya. Di Golang, penutupan digunakan secara meluas untuk meningkatkan kebolehbacaan kod, kebolehgunaan semula dan kebolehselenggaraan.

Apakah penutupan?

Penutupan terdiri daripada dua bahagian:

  • Fungsi bersarang: Fungsi yang ditakrifkan dalam fungsi lain.
  • Persekitaran boleh ubah: Set pembolehubah yang diakses oleh fungsi bersarang, yang ditakrifkan dalam skop luar fungsi bersarang.

Apabila fungsi bersarang dipanggil, ia bukan sahaja melaksanakan kodnya sendiri, tetapi juga mengakses persekitaran pembolehubah yang dimilikinya. Tingkah laku ini membolehkan penutupan merangkum data peribadi sambil membenarkan fungsi luaran mengakses data tersebut.

Penutupan dalam Corak Reka Bentuk

Penutupan boleh digunakan pada pelbagai corak reka bentuk dalam projek Golang, termasuk:

  • Corak Kilang: Kaedah kilang yang digunakan untuk mencipta objek jenis tertentu. Penutupan boleh merangkumi kaedah kilang dan data peribadi yang digunakan untuk mencipta objek.
  • Mod Strategi: Mod untuk bertukar secara dinamik antara algoritma berbeza. Penutupan boleh merangkumi kaedah strategi dan data peribadi yang digunakan untuk lulus parameter algoritma.
  • Corak pemerhati: Digunakan untuk membenarkan objek melanggan acara objek lain. Penutupan boleh merangkumi kaedah pemerhati dan data peribadi yang digunakan untuk menghantar data acara.

Kes Praktikal: Corak Kilang

Berikut menunjukkan contoh Corak Kilang yang dilaksanakan menggunakan penutupan:

package main

import (
    "fmt"
)

func main() {
    // 定义工厂函数,其中闭包封装了创建特定对象所需的私有数据。
    createAnimalFactory := func(animalType string) func() Animal {
        switch animalType {
        case "dog":
            return func() Animal { return &Dog{name: "Fido"} }
        case "cat":
            return func() Animal { return &Cat{name: "Whiskers"} }
        default:
            return nil
        }
    }

    // 创建不同的动物。
    dogFactory := createAnimalFactory("dog")
    dog := dogFactory()
    fmt.Println(dog)

    catFactory := createAnimalFactory("cat")
    cat := catFactory()
    fmt.Println(cat)
}

// Animal 接口定义了所有动物类型共享的方法。
type Animal interface {
    GetName() string
}

// Dog 类型实现了 Animal 接口。
type Dog struct {
    name string
}

func (d *Dog) GetName() string {
    return d.name
}

// Cat 类型实现了 Animal 接口。
type Cat struct {
    name string
}

func (c *Cat) GetName() string {
    return c.name
}

Dalam contoh ini, penutupan mengembalikan nilai animalType 变量保存在其变量环境中,使 createAnimalFactory 函数可以根据不同的 animalType kepada fungsi penciptaan yang berbeza.

Atas ialah kandungan terperinci Corak reka bentuk penutupan dalam projek Golang. 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