デザインパターンの訪問者初心者モード

 

プログラムのケース:私はこの数学の唯一の2つの作業の言語を持っていますが、誰でも見ることができます。

  1  / * *********************************************** ***********************************************
   2  - -------------------- ----------------------プログラムケース
   3  学校の練習帳の子この本の中で数学の宿題と中国の宿題の2種類が、それを自分自身を記述するために                                  
   4  親がそれをチェックアウトする必要があり、それをマークするために、教師、時にはそれがに友人や家族に依存して
   5  全体的に、2でこの作品が、それはアクセスをたくさん持っている、あなたが展開する必要がある場合があり
   6  
  7  --------------------- ---------------ケーススタディ-------
   8  小学校の数学と言語の仕事の固定に相当するデータの2つだけ種類、それを訪問するために、異なる人々は、データの操作に相当し、これは変更される
   9は、 教師があってもよいかもしれ両親、そして異なった人々は異なっている彼の操作にそれを訪問し、時には友人の同等のものに依存してくる
 10  ケース数学の宿題と中国の宿題がで変更されません。次に、動作データを増加させる方法、保守プログラムのためのポスト
 11  
12  ---------------------- --------コアアイデア------------
 13                       ビジターパターンは、データなしでデータ操作を増加させるための方法変更することができる
 14  
15  役割----------------------分割---- ------------------
 16人の       抽象訪問者(抽象ビジタークラス)
 17人の       特定の訪問者(ビジターアクセス派生クラスの先生や両親アクセスクラス)
 18個の       抽象要素(抽象作品クラス)
 19個の       特定の要素(ジョブクラス由来の数学演算及び言語ワーク)
 20        リスト要素を格納するために使用されるオブジェクトの構造(メンバ変数)
 21        状況せずにデータを変更することができ、訪問者モード、データ操作の操作を増加させる方法
 22  ************************************************* ********************************************** * / 
23# <入出力ストリーム>含む
 24の#include <リスト>
 25  使って 名前空間、STD
 26である 
27 クラスビジター
 28  {
 29  公共30      仮想 ボイド VisitMathHomework(){COUT << " 111 " << ENDL;};
 31は、     仮想 ボイド(){} VisitChineseHomework;
 32  };
 33は 
34である クラス TeacherVisitor:公共ビジター
 35  {
 36  公共37      ボイドVisitMathHomework()
 38は     、{
 39          COUT << " 教師レビュー数学演算90分" << ENDL。
40      }
 41は、     ボイドVisitChineseHomework()
 42である     {
 43は          COUT << " 教師レビュー言語ジョブ100 " << ENDL;
 44である     }
 45  };
 46れる 
47  クラス ParentVisitor:公共ビジター
 48  {
 49  公共50      ボイドVisitMathHomework()は
 51であり、     {
 52れます          << COUT 数学的な操作を確認するための親 << てendl;
 53れる     }
 54であり     、ボイドVisitChineseHomework()
 55      {
 56は          COUT << " 親言語の仕事をチェックするために、" << てendl;
 57である     }
 58  };
 59  
60  クラスの宿題
 61は、 {
 62はある 公共63です     仮想 ボイド(ビジター*受け入れm_abstractVisitorを){};
 64  };
 65  
66  クラス MathHomework:公共宿題
 67  {
 68  公共69      無効 *(ビジターを受け入れm_abstractVisitor)
 70      {
 71          m_abstractVisitor-> VisitMathHomework();
72      }。
73  }。
74  
75  クラス ChinesehHomework:公共宿題
 76  {
 77  公共78      ボイド(ビジター*受け入れるm_abstractVisitor)の
 79      {
 80          m_abstractVisitor-> VisitChineseHomework();
81      }。
82  }。
83  
84  クラスObjectStructure
 85  {
 86 プライベート87      リスト<宿題*> elementsList。
88  公共89      はaddElement(宿題* m_homework)
 90      {
 91          elementsList.push_back(m_homework)。
92      }
 93      ボイドディスプレイ(ビジター* m_abstractVisitor)
 94      {
 95          のための(スタンダード::リスト<宿題*> ::イテレータITER = elementsList.begin();!ITER = elementsList.end(); ITER ++ 96          {
 97              (* ITER) - > )(m_abstractVisitorを受け入れます。
98          }
99      }
 100  }。
101  
102  INT メイン()
 103  {ObjectStructure m_objectStructure。
104      m_objectStructure.addElement(新しいMathHomework)。
105      m_objectStructure.addElement(新しいChinesehHomework)。
106  
107      // 老师访问
108      TeacherVisitor * m_teacherVisitor = 新しいTeacherVisitor。
109      m_objectStructure.display(m_teacherVisitor)。
110  
111  
112      // 家长访问
113      ParentVisitor * m_parentVisitor = 新しいですParentVisitor;
 114      m_objectStructure.display(m_parentVisitor);
 115  
1 16      GETCHAR();
 117      戻り 0 ;
 1 18  };
 119  
120  
121  
122  / * 
123  参考書URL:
 124  https://www.cnblogs.com/chenssy/p/ 3339756.html    ロールモデル記述約訪問者に
 125  、「西のデザインパターン」
 126  
127  
128  * /

 

出力:

 

おすすめ

転載: www.cnblogs.com/wuhongjian/p/11566767.html
おすすめ