プログラムのケース:私はこの数学の唯一の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 * /
出力: