I.概要
で一般的には、「行動要求者」と「行動の実装者は」密結合します。しかし、このような「記録、アンドゥ/リドゥ、トランザクション」および他の治療の行動に関してはいくつかのケースでは、そのような変更は、密結合が適切でない抵抗することはできません。これらのケースでは、「行為の要求者」と「行動の実装」デカップリング、2間の疎結合を実現するために不可欠です。コマンドモードでは、このような問題を解決するための良い方法です。
第二に、コマンドモードの
ため、要求の異なるパラメータを使用してクライアントを作成するオブジェクトのパッケージへのコマンドモード要求、;要求キューまたはログ要求、および取り消し可能操作をサポート。
図コンフィギュレーションコマンドモードは次の通りであります
コマンドインタフェースコマンドが定義された
コマンド・インタフェースは、特定のコマンド定義ConcreteCommand器具
作成および受信機を設定するために使用されるクライアント固有のコマンド
コマンドは、対応するアプリケーションを実行インボーカ請求
つの要求の実施形態を有する受信機を、任意のクラスは、受信機として使用することができます。
第三には、例は、
アンドゥ機能、この要件を達成するために、次のコマンドモードをサポートするために必要なグラフィックシステムを実現するものとします。
まず、抽象コマンド・インタフェースの定義
パブリック インターフェイスIGraphCommand { 空描画(); 空アンドゥ(); }
そして、特定の描画コマンドを実現
パブリック クラスライン:IGraphCommand { プライベートポイントにstartPoint。 プライベートポイントなendPoint。 公衆回線(ポイント開始、ポイント終了) { startPoint = 始めます。 なendPoint = 終了。 } 公共 のボイドドロー() { Console.WriteLineを(" ライン描く:{0} {1} " 、startPoint.ToStringを())(endPoint.ToString)。 } 公共 のボイド元に戻します() { Console.WriteLineを(" 消去行:{0} {1} " 、startPoint.ToString()、endPoint.ToString())。 } } パブリック クラス長方形:IGraphCommand { プライベートポイントtopLeftPoint。 プライベートポイントbottomRightPoint。 公共長方形(ポイントTOPLEFT、ポイントbottomRight) { topLeftPoint = TOPLEFT。 bottomRightPoint = bottomRight。 } 公共 のボイドドロー() { Console.WriteLineを(" 四角形を描画:左上ポイント{0}、右下ポイント{1} " 、)(topLeftPoint.ToString、bottomRightPoint.ToString()); } 公共 のボイド元に戻します() { Console.WriteLineを(" 消去長方形:左上ポイント{0}、右下ポイント{1} " 、topLeftPoint.ToString()、bottomRightPoint.ToString()); } } パブリック クラスサークル:IGraphCommand { プライベートポイント中心点。 プライベート int型の半径; 公共円(ポイントセンター、int型の半径) { 中心点 = センター。 この .radius = 半径。 } 公共 のボイドドロー() { Console.WriteLineを(" 円を描く:センターポイント{0}、{1}半径" 、centerPoint.ToString()、radius.ToStringを())。 } publi cvoid元に戻します() { Console.WriteLineを(" 消去サークル:センターポイント{0}、{1}半径" 、centerPoint.ToString()、radius.ToString())。 } }
次に、コマンド受信機として定義されたクラスを描きます
パブリック クラスグラフィックス { スタック <IGraphCommand>コマンド= 新しいスタック<IGraphCommand> (); 公共 のボイドドロー(IGraphCommandコマンド) { command.Draw(); commands.Push(コマンド); } 公共 のボイド元に戻します() { IGraphCommandコマンド = commands.Pop()。 command.Undo(); } }
最後に、呼び出す方法を見て
静的な 無効メイン(文字列[] argsを) { ラインライン = 新しい行(新しいポイント(10、10)、新しいポイント(100、10 )); 矩形矩形 = 新しい矩形(新しいポイント(20、20)、新しいポイント(50、30 ))。 サークルサークル = 新しい円(新しいポイント(500、500)、200 )。 グラフィックグラフィック = 新しいグラフィック()。 graphics.Draw(ライン)。 graphics.Draw(長方形) graphics.Undo(); graphics.Draw(円) Console.ReadLine(); }