北の風のパターン設計のコース---責任パターンの22チェーン
概要
文の要約:
、シーンのレベルを設定している人のための責任の連鎖:シーンのレベルを設定します。
対応する抽象クラスがあります:オブジェクト指向のデザインパターンを、または治療のクラスは、ここ責任パターンの抽象親クラス処理チェーンとして対応するクラス抽象ファクトリクラスを持ち、開閉動作が自然な原則を満たすことです。
1、達成するためにどのように責任のパターンコードのチェーン?
||| -begin
パッケージComkibeifaedag.aksh2; 公開 抽象 クラスCarHandler { 保護CarHandler CarHandler。 公共CarHandler SetNextHandler(CarHandler CarHandler){ この Kcrをःandler = Crのःandler。 戻る このKcrをःandlerを。 } パブリック 抽象 ボイドHandlerCar()。 }
|||末端
図1は、次の既知のオブジェクトのレベル:鎖間のラインにクラスは、各クラスには、次のオブジェクトレベルは、通知は次のレベルを容易にすることを知っています
2、指定抽象クラス:直接抽象クラスで指定され、個別に各クラスを設計する必要がありません
2、実行順序にどのように外部の柔軟性を指定するには、Chain of Responsibilityパターン?
||| -begin
1 、抽象クラスのプロセス パッケージcom.ibeifeng.ex2、 パブリック 抽象 クラスCarHandler { 保護CarHandler carHandler; 公共CarHandler setNextHandler(CarHandler carHandler){ この .carHandler = carHandler; 戻り 、この.carHandlerを; } パブリック 抽象 ボイドHandlerCar(); }
2 、具象クラスの工程:例えば、フロントハンドリングクラス パッケージcom.ibeifeng.ex2、 パブリック クラス CarHeadHandler 延びCarHandlerを{ 公共 ボイドHandlerCar(){ System.out.println( "フロントアセンブリ" ); IF(この!.CarHandler = NULL ){ この.carHandler.HandlerCar(); } } }
/ 3 、クライアント実装 // 順次変更し、望ましくはボディ- >前部-後部 bodyH.setNextHandler(headH); headH.setNextHandler(tailH); bodyH.HandlerCar()。
|||末端
抽象クラスを実行するsetNextHandler方法:このメソッドは、オブジェクトと、オブジェクトを受信するための手段であり、この自然な方法を実行するために便利です。
3、どのように責任のパターンのチェーン実行のチェーン?
||| -begin
抽象クラスの処理 パッケージcom.ibeifeng.ex2; パブリック 抽象 クラスCarHandler { 保護CarHandler carHandler; 公共CarHandler setNextHandler(CarHandler carHandler){ この .carHandler = carHandler; 戻り 、この; .carHandler } パブリック 抽象 ボイドHandlerCarを(); } クライアントチェーンの実現
// シンプル bodyH.setNextHandler(headH).setNextHandler(tailH); bodyH.HandlerCar();
|||末端
チェーン実行コア動作は、抽象クラスのメソッドである次のレベルはsetNextHandlerオブジェクトを返す:this.carHandlerを返します。
4. Chain of Responsibilityパターンの利点は何ですか?
1、問題解決のこのレベル
2、ユーザーが実行の内部流れを知っているかどうかを指定するための柔軟性:ユーザーが実行する方法を管の内側にある必要はありませんが、ユーザー間の実行フローは、クラスを知っていれば、ユーザーは、直接指定することができます
5、ユーザーがどのような内部の実行を管理する方法をデザインパターンを必要としませんか?
Chain of Responsibilityパターン(これも内部実行順序を制御するために設けられていてもよい)、アピアランス・モデル
6. Chain of Responsibilityパターンは何ですか?
密接に連鎖としてリンクされたオブジェクトのクラス間
責任のチェーンも機能として知られている(COR)モード、
責任や義務はチェーンモード連鎖モードは行動パターンの一つであり、
パターンがクラスの異なる責任一連のプレーするように構成されている
タスクを完了するために一緒に来て同じように、オブジェクトのこれらのクラス間のようなチェーン
密接にリンク先の記事などが、それはデューティチェーンと呼ばれています。
責任パターンの7、アプリケーションシナリオチェーン?
実施例1:顧客クライアントは、A、B、C、Dを4部からなるタスクを、そのようなタスクを完了します。Aへの最初の顧客のクライアントタスクの後、Aは、完全なD部まで...、D、パートBを完了するために、B、Bにタスクの一部を完了します。
例2:たとえば、政府の仕事の特定の部分は、県政府は、彼は、いくつかの州政府に扱うことができない扱うことができる最初の部分を完了するために、州政府およびその委任活動の後、完全な部分が、いくつかは、中央政府に扱うことができません中央政府の仕事を完成します。
例3:伝播メッセージ・ソフトウェア・ウィンドウ。
実施例4:サーブレット・フィルター容器(フィルタ)フレームワークの実装。
8、Chain of Responsibilityパターンのための基本的な条件は?
1は、オブジェクトの組織チェーン:タスクオブジェクトのすべての職務を行う必要性は鎖の形態で編成されています。
図2に示すように渡される、または要求メッセージ:メッセージ要求は、オブジェクトのチェーンに沿って、またはオブジェクトように処理チャンスチェーン内のオブジェクトに渡されます。
図3は、チェーン内の対象オブジェクトに責任の割り当て:異なるオブジェクトは、異なる機能を実行します。
図4は、タスク:ターゲット・オブジェクトは、チェーンおよび終了タスク要求停止メッセージの終わりであるかに渡されます。
:Chain of Responsibilityパターンを達成するために、モデルの基本的な条件満たすために必要な
1、対象組織のチェーンを。私たちは、チェーンの形で編成されているタスクオブジェクトのすべての職務を行う必要があります。
2、メッセージまたは要求を渡します。被処理チェーン機会の対象となるように、要求メッセージ又は鎖に沿ってオブジェクトを渡します。
図3に示すように、オブジェクトのオブジェクトのチェーンにおける責任の割り当てです。異なるオブジェクトは異なる職務を行います。
4は、タスクが完了しています。ターゲットオブジェクトの終了は、チェーンの最後にあり、タスク要求メッセージを停止したり、渡さ。
9、利点とChain of Responsibilityパターンの欠点?
1アドバンテージ:のみ動作する必要があり、各クラス(次のオブジェクトに治療を提供することではないが完了した)プロセスを所有し、明確な最小のパッケージ・カテゴリーの原則に沿って、責任範囲のすべての種類、:責任を共有します。
2つの利点:フリー組み合わせワークフロー:ワークフローを自由に必要に応じて組み合わせることができます。作業プロセスを変更するような、オブジェクト・チェーンによって再割り当てすることができ、新たなワークフローに適応することができます。
3利点:疎結合:クラス間の疎結合の形で編成されてもよいです。
一つの欠点:処理速度:別の実施態様によれば、処理速度に影響を与える可能性があり、処理対象との間の連鎖移動メッセージの形態です。
10、デューティチェーンの役割と責任?
ハンドラ:抽象親クラス処理。:CarHandler.java
concreteHandler:具体的な処理クラス。:CarHeadHandler.java; CarBodyHandler.java; CarTailHandler.java
要約では第二に、コンテンツ
1、サポート技術情報
ハンドラ:抽象親クラス処理。:CarHandler.java
concreteHandler:具体的な処理クラス。:CarHeadHandler.java; CarBodyHandler.java; CarTailHandler.java
図2に示すように、コード
ハンドラ:抽象親クラス処理。:CarHandler.java
パッケージComkibeifaedag.aksh2; 公開 抽象 クラスCarHandler { 保護CarHandler CarHandler。 公共CarHandler SetNextHandler(CarHandler CarHandler){ この Kcrをःandler = Crのःandler。 戻る このKcrをःandlerを。 } パブリック 抽象 ボイドHandlerCar()。 }
concreteHandler:具体的な処理クラス。:CarHeadHandler.java; CarBodyHandler.java; CarTailHandler.java
CarHeadHandler.java;
パッケージcom.ibeifeng.ex2。 パブリック クラス CarHeadHandlerは延び{CarHandlerを 公共 ボイドHandlerCar(){ System.out.printlnは( "组装车头" )。 もし(この!.carHandler = ヌル){ この.carHandler.HandlerCar(); } } }
CarBodyHandler.java;
パッケージcom.ibeifeng.ex2。 パブリック クラス CarBodyHandlerは延びCarHandler { 公共 ボイドHandlerCar(){ System.out.printlnは( "ΧιΧ°³Ινを" )。 もし(この!.carHandler = ヌル){ この.carHandler.HandlerCar(); } } }
CarTailHandler.java
パッケージcom.ibeifeng.ex2。 パブリック クラス CarTailHandlerは延びCarHandler { 公共 ボイドHandlerCar(){ System.out.printlnは( "ΧιΧ°³Ξ²を" )。 もし(この!.carHandler = ヌル){ この.carHandler.HandlerCar(); } } }
クライアントの実装:
パッケージcom.ibeifeng.ex2、 パブリック クラスMainClass { 公共 静的 ボイドメイン(文字列[]引数){ CarHandler headH = 新しい新しいCarHeadHandler(); CarHandler bodyH = 新しい新しいCarBodyHandler(); CarHandler tailH = 新しい新しいCarTailHandler(); // 組立手順事前に設定、順序が正面である- >ボディ- >リア headH.setNextHandler(bodyH); bodyH.setNextHandler(tailH); // 完成のコールデューティチェーンリンクヘッド headH.HandlerCar(); システム。 out.printlnを( "---------------" ); //望ましく体の順序を変更- >フロント-リヤ bodyH.setNextHandler(headH); headH.setNextHandler(tailH); bodyH.HandlerCar(); // 単純 bodyH.setNextHandler(headH).setNextHandler(tailH) 。 bodyH.HandlerCar(); } }
ます。https://www.cnblogs.com/Renyi-Fan/p/11073316.htmlで再現