Sobes.tech
Junior

Ar kuriem dizaina modeļiem jūs esat iepazinies?

sobes.tech AI

Atbilde no AI

Es zinu dažādus projektēšanas modeļus, kas tiek izmantoti Go. Daži no biežāk sastopamajiem:

Izveides modeļi:

  • Singleton: Nodrošina, ka pastāv tikai viens klases instances un nodrošina globālu piekļuvi tam. Go bieži realizē ar sync.Once.
    package main
    
    import (
    	"sync"
    )
    
    type singleton struct{}
    
    var instance *singleton
    var once sync.Once
    
    func GetInstance() *singleton {
    	once.Do(func() {
    		instance = &singleton{}
    	})
    	return instance
    }
    
  • Factory Method: Definē saskarni objektu izveidei, bet ļauj apakšklasēm izlemt, kuru klasi instancēt. Go bieži realizē ar funkcijām, kas atgriež saskarni.
    package main
    
    type Product interface {
    	Operate()
    }
    
    type ConcreteProductA struct{}
    
    func (p *ConcreteProductA) Operate() {
    	// Operācijas realizācija
    }
    
    type ConcreteProductB struct{}
    
    func (p *ConcreteProductB) Operate() {
    	// Operācijas realizācija
    }
    
    func NewProduct(productType string) Product {
    	switch productType {
    	case "A":
    		return &ConcreteProductA{}
    	case "B":
    		return &ConcreteProductB{}
    	default:
    		return nil // Vai kļūda
    	}
    }
    
  • Abstract Factory: Nodrošina saskarni saistītu vai atkarīgu objektu sēriju izveidei bez to konkrētu klasu norādīšanas.
  • Builder: Atšķir sarežģīta objekta būvniecības procesu no tā prezentācijas.

Strukturālie modeļi:

  • Adapter: Pārvērš viena klases saskarni citā, kas nepieciešama klientiem. Ļauj klasēm sadarboties, kas citādi būtu nesaderīgas.
  • Decorator: Dinamiski pievieno jaunas atbildības objektam. Dekoratori nodrošina elastīgāku alternatīvu mantošanai funkcionalitātes paplašināšanai.
  • Facade: Nodrošina vienotu saskarni pie sub-sistēmas saskarnēm. Definē augstākā līmeņa saskarni, kas atvieglo sub-sistēmas izmantošanu.
  • Proxy: Nodrošina aizstājēju vai aizpildītāju citam objektam, lai pārvaldītu piekļuvi tam.

Uzvedības modeļi:

  • Observer: Definē "viena pret daudz" atkarību starp objektiem. Kad mainās viena objekta stāvoklis, visi tā atkarīgie objekti tiek informēti un automātiski atjaunināti.
  • Strategy: Definē algoritmu ģimeni, to inkapsulē un padara tos maināmus. Ļauj algoritmiem mainīties neatkarīgi no klientiem, kas tos izmanto.
    package main
    
    type Strategy interface {
    	Execute(data string)
    }
    
    type ConcreteStrategyA struct{}
    
    func (s *ConcreteStrategyA) Execute(data string) {
    	// Stratēģijas A realizācija
    }
    
    type ConcreteStrategyB struct{}
    
    func (s *ConcreteStrategyB) Execute(data string) {
    	// Stratēģijas B realizācija
    }
    
    type Context struct {
    	strategy Strategy
    }
    
    func (c *Context) SetStrategy(strategy Strategy) {
    	c.strategy = strategy
    }
    
    func (c *Context) ExecuteStrategy(data string) {
    	c.strategy.Execute(data)
    }
    
  • Template Method: Definē algoritma karkasu operācijā, pārvietojot dažus soļus uz apakšklasēm. Ļauj apakšklasēm pārdefinēt noteiktus algoritma soļus, nemainot tā struktūru.

Papildus uzskaitītajiem, zinu arī tādus kā Command, Chain of Responsibility, Iterator, Mediator, Memento, State, Visitor. Go bieži izmanto arī valodas specifiskas dizaina idiomas, piemēram, saskarnes abstrakcijai, gorutinas un kanālus paralēlismam.