Sobes.tech
Junior

Hansı dizayn şablonları ilə tanışsınız?

sobes.tech Süni İntellekt

AI-dan cavab

Mən Go-da istifadə olunan müxtəlif dizayn nümunələri ilə tanışam. Ən çox rast gəlinənlərdən bəziləri:

Yaranma nümunələri:

  • Singleton: Yalnız bir nümunənin mövcud olmasını təmin edir və ona qlobal giriş nöqtəsi təqdim edir. Go-da tez-tez sync.Once ilə həyata keçirilir.
    package main
    
    import (
    	"sync"
    )
    
    type singleton struct{}
    
    var instance *singleton
    var once sync.Once
    
    func GetInstance() *singleton {
    	once.Do(func() {
    		instance = &singleton{}
    	})
    	return instance
    }
    
  • Fabrika Metodu: Obrazı yaratmaq üçün interfeys müəyyən edir, lakin alt siniflər hansı sinifin nümunəsini yaradacağını qərar verir. Go-da tez-tez interfeys qaytaran funksiyalar vasitəsilə həyata keçirilir.
    package main
    
    type Product interface {
    	Operate()
    }
    
    type ConcreteProductA struct{}
    
    func (p *ConcreteProductA) Operate() {
    	// Əməliyyatın həyata keçirilməsi
    }
    
    type ConcreteProductB struct{}
    
    func (p *ConcreteProductB) Operate() {
    	// Əməliyyatın həyata keçirilməsi
    }
    
    func NewProduct(productType string) Product {
    	switch productType {
    	case "A":
    		return &ConcreteProductA{}
    	case "B":
    		return &ConcreteProductB{}
    	default:
    		return nil // və ya xəta
    	}
    }
    
  • Abstrakt Fabrika: Əlaqəli və ya asılı obyektlərin ailələrini yaratmaq üçün interfeys təqdim edir, onların konkret siniflərini göstərmədən.
  • Builder: Çətin obyektin qurulma prosesini onun təqdimatından ayırır.

Struktur nümunələri:

  • Adapter: Bir sinifin interfeysini digərinə çevirir, müştərilərin tələb etdiyi interfeysə uyğunlaşdırır. Siniflərin birlikdə işləməsinə imkan verir, əks halda isə uyğunsuz olardı.
  • Decorator: Dinamik olaraq obyektə yeni vəzifələr əlavə edir. Dekoratorlar funksionallığın genişləndirilməsi üçün irsən istifadə etməyə çevik alternativ təqdim edir.
  • Facade: Alt sistemdəki bir sıra interfeyslərə vahid interfeys təqdim edir. Alt sistemi istifadə etməyi asanlaşdıran yüksək səviyyəli interfeys müəyyən edir.
  • Proxy: Digər obyekt üçün yerinə və ya doldurucu kimi xidmət edir və ona girişin idarə olunmasını təmin edir.

Davranış nümunələri:

  • Observer: Obektlər arasında "birinə çox" asılılığı müəyyən edir. Bir obyektin vəziyyəti dəyişdikdə, onun bütün asılı obyektləri xəbərdar edilir və avtomatik yenilənir.
  • Strategy: Alqoritmlər ailəsini müəyyən edir, hər birini kapsülləyir və bir-birinə dəyişdirilə bilən edir. Alqoritmlərin istifadəçilərdən müstəqil olaraq dəyişməsinə imkan verir.
    package main
    
    type Strategy interface {
    	Execute(data string)
    }
    
    type ConcreteStrategyA struct{}
    
    func (s *ConcreteStrategyA) Execute(data string) {
    	// Strategiya A-nın həyata keçirilməsi
    }
    
    type ConcreteStrategyB struct{}
    
    func (s *ConcreteStrategyB) Execute(data string) {
    	// Strategiya B-nin həyata keçirilməsi
    }
    
    type Context struct {
    	strategy Strategy
    }
    
    func (c *Context) SetStrategy(strategy Strategy) {
    	c.strategy = strategy
    }
    
    func (c *Context) ExecuteStrategy(data string) {
    	c.strategy.Execute(data)
    }
    
  • Şablon Metodu: Alqoritmin karkasını əməliyyatda müəyyən edir, bəzi addımları alt siniflərə köçürür. Alt siniflərin alqoritmin müəyyən addımlarını yenidən təyin etməsinə imkan verir, onun strukturunu dəyişmədən.

Əlavə olaraq, Command, Responsibility Chain, Iterator, Mediator, Memento, State, Visitor kimi nümunələrlə tanışam. Go-da həmçinin dilə xas dizayn idiomları da geniş istifadə olunur, məsələn, interfeyslər vasitəsilə abstraksiya, gorutinlər və kanallar vasitəsilə paralelləşdirmə.