コマンドパターンには、Invoker、Command、Receiverの3つの主要コンポーネントがあります。クライアントは、 Receiverで特定のメソッドを呼び出すために必要な情報をInvokerに提供しますが、実際にを呼び出すのはCommandオブジェクト(Receiverによって格納されます)です。M
M
a)CPを実装するには、コマンドの数を増やしてもInvokerクラスを変更する必要がないように、 Invokerのロジックをコマンドの数から切り離す必要があります。これを行うには、CommandオブジェクトとInvokerを抽象化(つまりインターフェイス)に依存させます。
そのため、CPはDIPの特定の実現だけではありませんか?
b)CPが実際にDIPの実装である場合、 CPが他のタイプのDIP実装と正確に異なる点は何ですか?つまり、 DIPの他のすべての実装にもInvokerオブジェクト(つまり、より高いレベルのモジュール)、Commandオブジェクト(つまり、より高いレベルのモジュールに動作を提供する依存関係)があり、Receiverは依存関係オブジェクト(つまり、下位レベルのモジュール)呼び出し?
ありがとうございました
編集:
a)
依存オブジェクトは依存関係をフィールドとして保持し、それを後続のすべてのメソッド呼び出しに使用します。
そして、依存オブジェクトがこの依存関係をフィールドとして保持しない場合、したがって、すべてのsubsequnt呼び出しにそれを使用するのではなく、常に新しい依存関係オブジェクトを受け取ります。次に、DIではなくCPがあると主張できますか?
逆もまた同様です。Invokerが常に同じコマンドオブジェクトを呼び出す場合、実際に実行する作業コマンドオブジェクトに関係なく、CPではなくDIがあると主張できますか?
b)あなたが言いたいことは理解していますが、何が何かを振る舞うのか、何がコマンドなのかを区別するのに、まだいくつかの大きな問題があります。私の見解では、コマンドをInvokerに渡すことは、依存オブジェクトがそのジョブを実行するために必要な動作を注入することとして解釈することもできます。それは本当にとても明確ですか、それともより主観的ですか?したがって、オブジェクトによって実行される作業がコマンドであるか動作であるかをどのように判断するのでしょうか。