オブザーバーパターンの言語を学ぶ行きます

Observerパターンを初めて目

1.目的と抽象オブジェクトは、オブザーバを確立する必要があります

1  // 抽象的なテーマ
2種類件名インターフェース{
 3      追加(オブザーバーO)
 。4      送信(STR 文字列。5  }
 。6  
。7  // 抽象ビューア
。8種類オブザーバーインターフェース{
 9      受信(STR 文字列10 }

2.特定の実装のテーマ

1  // -------------気象テーマ------------------ 
2型NewsSubject用の構造体{
 3      タイトル文字列
4      のL * list.List
 5  }
 。6  
。7  // 抽象的なテーマの非侵襲的な実装に関連する天候
。8 FUNC(SUB * NewsSubject)追加(オブザーバーO){
 9      sub.l.PushBack(O)
 10  }
 11  
12である // 非侵襲的器具抽象的なテーマに関連する気象
13は FUNC(SUB * NewsSubject)を送る(STR 文字列){
 14      のために)私は(= sub.l.Frontを:!; I =ニル; I = i.next(){
 15         (i.Value)(sub.title +(観察).Receive " 送信:" + STR)
 16      }
 17  }
 18である 
19。 // ------------- ---ホットトピック--------------- 
20は HotSubject型構造体{
 21である      タイトル文字列
22れる      L * list.List
 23である }
 24の 
25  // 抽象の非侵襲的な実装に関連するホットな話題
26は FUNC(SUB * HotSubject)追加(オブザーバーO){
 27      sub.l.PushBack(O)
 28  }
 29件の 
30  // 非侵襲的な実装抽象に係るホットトピック
31FUNC(サブ* HotSubject)(STRの送信文字列){
 32       I:= sub.l.Front()。!I = nilを; I = i.Next(){
 33          (i.Value)(観察).Receive(sub.title +。" 发送的:" + STR)
 34      }
 35 }

3.オブザーバ実現

1  // -------------ビューア------------------ 
2型aObserverの構造体{
 3文字列
4  }
 。5  
。6  / / 非侵襲的観察は、抽象ビューアを実装する
。7 FUNC(O * aObserver)受信(STR 文字列){
 8      fmt.Println(" クラス観察{ " + o.name + " ]受信" + STR)
 。9  }
 10  
。11  // -------------ビューアB ------------------ 
12は bObserver型構造体{
 13である      名前ストリング
14  }
 15  
16  // B非侵襲的観察者が抽象ビューアを実装
。17 FUNC(O * bObserver)受信(STR 文字列){
 18は      fmt.Println(" クラスB [オブザーバ" +はo.name + " }受信しました" + STR)
 。19 }

4.実際の呼び出し

1  FUNCメイン(){
 2      :=&aObserver {
 3          名:" ジョー・スミス" 4      }
 。5  
6。      B:=&bObserver {
 7。          名:" ジョン・ドウ" 8      }
 9。 
10      @ プレスおよびbを可能にサブスクリプション・タイプオブザーバ
11の。      ニュース:= NewsSubject {
 12は、         L:list.New()、
 13は          :タイトル" 武漢ニュース" 14      }
 15      news.Add(A)
 16     news.Add(b)は
 17。 
18れる     // ホットのみ視聴者のサブスクリプション・タイプBを可能
19。      ホット:= HotSubject {
 20は、         L:list.New()、
 21は、          タイトル:" 孝ホットスポット" 22である     }
 23で     hot.Add(b)は
 24  
25      news.Send(州の赤い嵐の警告26      hot.Send(都市のダウンタイムが閉じて27 }

5.ファイル名を指定して実行結果

 

おすすめ

転載: www.cnblogs.com/shi2310/p/10941626.html