2013-07-22 20 views
5

Ecco il problema generale che sto cercando di risolvere:Come implementare Strategy Pattern in Go?

  1. Una serie di pacchetti sta raccogliendo dati da una sorgente e inviarlo a molti canali.
  2. Un secondo set di pacchetti raccoglie dati da molti canali e li scrive su un'unica fonte. Questo insieme di pacchetti dovrebbe tradurre i dati da più formati.

Questo sembra un caso perfetto per il modello di strategia, ma non sono sicuro del modo migliore per farlo funzionare in Go.

risposta

11

In generale; non perderti nei modelli e nei protocolli per creare applicazioni Go. Il linguaggio rende facile essere espressivi e semplici. Il più delle volte definire interfacce solide rende tutto abbastanza flessibile.

Eppure, ecco un esempio del modello di strategia in Go:

definire un'interfaccia per il comportamento delle strategie:

type PackageHandlingStrategy interface { 
    DoThis() 
    DoThat() 
} 

attuare tale strategia:

type SomePackageHandlingStrategy struct { 
    // ... 
} 

func (s *SomePackageHandlingStrategy) DoThis() { 
    // ... 
} 

func (s *SomePackageHandlingStrategy) DoThat() { 
    // ... 
} 

E poi o embed e hellip;

type PackageWorker struct { 
    SomePackageHandlingStrategy 
} 

func (w *PackageWorker) Work() { 
    w.DoThis() 
    w.DoThat() 
} 

e hellip; oppure passare la strategia & hellip;

type PackageWorker struct {} 

func (w *PackageWorker) Work(s PackageHandlingStrategy) { 
    s.DoThis() 
    s.DoThat() 
} 

& hellip; al tuo lavoratore.

+0

Risposta eccellente, grazie! Non mi sono perso tanto nei modelli perché sapevo che questo era un problema risolto in qualche modo. Grazie ancora. – KevDog

+1

Ma come si carica la strategia in modo dinamico? Se devo caricare una strategia basata sulla configurazione nel sito, come viene fatto andare? Da quello che vedo non c'è modo di caricare un pacchetto dinamicamente in golang. oppure c'è un'altro modo? – Madhan

+1

@Madhan utilizzando un'istruzione switch. – thwd

Problemi correlati