Analisis mendalam corak reka bentuk dalam rangka kerja golang

WBOY
Lepaskan: 2024-06-02 10:08:57
asal
943 orang telah melayarinya

Corak reka bentuk digunakan secara meluas dalam rangka kerja Go untuk meningkatkan fleksibiliti dan kebolehselenggaraan kod. Corak reka bentuk khusus termasuk: Corak Singleton: memastikan bahawa kelas hanya mempunyai satu contoh; Corak pemerhati: membenarkan objek untuk melanggan dan bertindak balas kepada peristiwa Corak kaedah kilang: menyediakan antara muka untuk mencipta objek, dan penciptaan khusus kelas ditentukan oleh subkelas.

Analisis mendalam corak reka bentuk dalam rangka kerja golang

Pemahaman mendalam tentang corak reka bentuk dalam rangka kerja Go

Corak reka bentuk biasanya digunakan model penyelesaian masalah yang boleh berulang dalam kejuruteraan perisian dan digunakan secara meluas dalam rangka kerja Go. Dengan memahami corak ini, pembangun boleh menulis kod yang lebih fleksibel, boleh diselenggara dan berskala.

1. Corak Singleton

memastikan bahawa hanya satu contoh kelas dibuat.

import (
    "sync"
    "fmt"
)

type Singleton struct {
    sync.Mutex
    isInitialized bool
    instance *Singleton
}

func GetInstance() *Singleton {
    s := &Singleton{}
    s.Lock()
    defer s.Unlock()
    if !s.isInitialized {
        s.instance = s
        s.isInitialized = true
    }
    return s.instance
}

func main() {
    instance1 := GetInstance()
    instance2 := GetInstance()
    fmt.Println(instance1 == instance2) // true
}
Salin selepas log masuk

2. Corak pemerhati

membolehkan objek melanggan dan bertindak balas kepada acara.

import (
    "fmt"
    "sync"
)

type Subject interface {
    Attach(observer Observer)
    Detach(observer Observer)
    Notify()
}

type Observer interface {
    Update()
}

type ConcreteSubject struct {
    sync.Mutex
    observers []Observer
    state     string
}

func (s *ConcreteSubject) Attach(observer Observer) {
    s.Lock()
    defer s.Unlock()
    s.observers = append(s.observers, observer)
}

func (s *ConcreteSubject) Detach(observer Observer) {
    s.Lock()
    defer s.Unlock()
    for i, o := range s.observers {
        if o == observer {
            s.observers = append(s.observers[:i], s.observers[i+1:]...)
            return
        }
    }
}

func (s *ConcreteSubject) Notify() {
    s.Lock()
    defer s.Unlock()
    for _, observer := range s.observers {
        observer.Update()
    }
}

func (s *ConcreteSubject) SetState(state string) {
    s.Lock()
    defer s.Unlock()
    s.state = state
    s.Notify()
}

type ConcreteObserver struct {
    id  int
    sub *ConcreteSubject
}

func (o *ConcreteObserver) Update() {
    fmt.Printf("ConcreteObserver %d notified, subject state: %s\n", o.id, o.sub.state)
}

func main() {
    subject := &ConcreteSubject{}
    observer1 := &ConcreteObserver{id: 1, sub: subject}
    observer2 := &ConcreteObserver{id: 2, sub: subject}
    subject.Attach(observer1)
    subject.Attach(observer2)
    subject.SetState("New state")
}
Salin selepas log masuk

3. Corak kaedah kilang

menyediakan antara muka untuk mencipta objek, tetapi kelas penciptaan khusus ditentukan oleh subkelas.

rreeee

Atas ialah kandungan terperinci Analisis mendalam corak reka bentuk dalam rangka kerja golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan