0

コマンドパターンは言う:

コマンド パターンを使用すると、実際にアクションを実行するオブジェクトからアクションのリクエスタを切り離すことができます。

コマンドは、操作を実行する方法を知っているオブジェクトから操作を呼び出すオブジェクトを分離します。

しかし、私が見つけたすべてのコード例では、Client(Requester、Inovker、RemoteControl、Waitress、Sender) と実際のオブジェクト (Reciver、TV、Garage、Coffe) の間にカップリングがあります。

以下のコマンドパターンでこの質問をする場合

回答: 言います: あなたのリモコンは TV が存在すること、またはそれについて何かを知りません。単に Command オブジェクトのインターフェイス/メソッドを呼び出すだけです。

しかし、Remote Class は TV クラスを認識しており、それ (リモート) は TV クラスのオブジェクトを作成しています。したがって、そこには関係による関連付けがあります。つまり、結合がすでにそこに存在します。

私が欠けているものを理解するのを手伝ってくれませんか。デカップリングやその他の意味を誤解していますか?

私は定義について本当に混乱しています。

4

2 に答える 2

0

テレビやリモコンの例をコマンドの設計パターンにラップするのは意味がないと思います。テレビとリモコンしかありません。インターフェイスを追加したとしても、抽象化のレベルが小さい(またはまったくない)ため意味がありません。

最後の文がコマンド設計パターンの要点です。いくらかの抽象化と無意識がなければなりません。IF通常、 「何か」を実行する実行可能コマンド (定義済み = コントラクトを使用) を受け入れるシステムがあります。

this の実装次第IFです。通常、複数の実装があります。私の最後の使用は何ですか?

Quartzフレームワークを使用したスケジューリングシステムがあります。私たちはそれをある種のサービスにラップしました。このサービスは、クォーツを使用して特定の時間に私たちの方法をIF受け入れます。perform

実行可能なタスクには 2 種類あります。1 つはすぐに実行され、もう 1 つは追加の時間で再スケジュールされました。これは、この質問の範囲外の理由によるものです。

両方のタイプのタスクは、実際の実行可能コードにもかかわらず、実行内容に関係なく実行されました。また、ラッピング サービスはそこで何が起こっているかを認識しておらず、両方のタイプのタスクはスケジューリング システムに関する知識を持っていません。

于 2013-08-19T07:09:47.133 に答える