2013-07-22 10 views
5

は私が解決しようとしている一般的な問題です:Goで戦略パターンを実装する方法は?ここで

  1. ワンパッケージのセットは、1つのソースからデータを収集し、多くのチャネルに送信されます。
  2. 2番目のパッケージセットは、多くのチャネルからデータを収集し、1つのソースに書き込むことです。このパッケージのセットは、複数のフォーマットからデータを変換する必要があります。

これは戦略パターンにとっては完璧なケースだと思われますが、Goでその作業を行うにはどうすればよいかわかりません。

答えて

11

一般的には、 Goアプリケーションを構築するためのパターンやプロトコルに迷う必要はありません。この言語は、表現力豊かで簡単な表現を可能にします。多くの場合、堅実なインターフェースを定義することで、すべてが柔軟になります。

type SomePackageHandlingStrategy struct { 
    // ... 
} 

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

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

そして:

type PackageHandlingStrategy interface { 
    DoThis() 
    DoThat() 
} 

は、その戦略を実装します。

は戦略の行動のためのインタフェースを定義します。

それでも、ここに行くにおける戦略パターンの例を示します。 、埋め込み…

type PackageWorker struct { 
    SomePackageHandlingStrategy 
} 

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

…または戦略&hellipを渡します。

type PackageWorker struct {} 

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

…あなたの労働者に。

+0

優秀な回答、ありがとう!私はこれがいくつかの方法で解決された問題であることを知っていたので、パターンでそんなに失われていませんでした。再度、感謝します。 – KevDog

+1

しかし、戦略を動的にロードするにはどうすればいいですか?サイトの設定に基づいて戦略をロードする必要がある場合は、どのように行っていますか?私が見るところでは、golangにパッケージを動的にロードする方法はありません。それとも別の方法がありますか? – Madhan

+1

@Madhanはswitch文を使用しています。 – thwd

関連する問題