2013-07-22 18 views
5

Oto ogólny problem usiłuję rozwiązać:Jak wdrożyć wzór strategii w programie Go?

  1. Jeden zestaw pakietów zbiera dane z jednego źródła i wysyłając go do wielu kanałów.
  2. Drugi zestaw pakietów zbiera dane z wielu kanałów i zapisuje je w jednym źródle. Ten zestaw pakietów musiałby tłumaczyć dane z wielu formatów.

Wydaje się, że jest to doskonały przypadek dla wzorca strategii, ale nie jestem pewien, jak najlepiej wykonać tę pracę w programie Go.

Odpowiedz

11

Ogólnie; nie gub się w wzorach i protokołach do budowania aplikacji Go. Język sprawia, że ​​łatwo być ekspresyjnym i prostym. Przez większość czasu definiowanie solidnych interfejsów sprawia, że ​​wszystko jest wystarczająco elastyczne.

Mimo to, oto przykład wzorca strategii w Go:

zdefiniować interfejs dla zachowania strategii:

type PackageHandlingStrategy interface { 
    DoThis() 
    DoThat() 
} 

Wdrożenie tej strategii:

type SomePackageHandlingStrategy struct { 
    // ... 
} 

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

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

a następnie , albo osadzić & hellip;

type PackageWorker struct { 
    SomePackageHandlingStrategy 
} 

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

& hellip; lub przekazać strategię & hellip;

type PackageWorker struct {} 

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

& hellip; do twojego pracownika.

+0

Doskonała odpowiedź, dzięki! Nie tyle gubię się w schematach, ile wiedziałem, że w jakiś sposób był to problem rozwiązany. Dzięki jeszcze raz. – KevDog

+1

Ale jak dynamicznie wczytać strategię? Jeśli muszę załadować strategię opartą na konfiguracji w witrynie, jak to zrobić w podróży? Z tego, co widzę, nie ma sposobu na dynamiczne ładowanie pakietu w golangu. A może jest inny sposób? – Madhan

+1

@Madhan za pomocą instrukcji switch. – thwd

Powiązane problemy