フォーラムメンバーの皆さん、こんにちは!
私はそのパターンを徹底的に理解した(ように見える)
Command
ので、それについて「自分の言葉で」語ってみたいと思います。
Wikipedia によると、その目的は、送信側クラスと受信側クラスが互いに直接依存しない構造を作成することであることがわかります。
送信者クラスを含むクラスへのコールバックを構成します。原則的には明確かつ正確に書かれていますが、これは理論上の話です。これを行う方法?ここから問題が始まります。なぜなら... 説明はもはやそれほど明確で明白ではありません。したがって、私はそれを理解しました、私がそれをどのように理解したかを伝えることにしました。おそらく誰かの役に立つでしょう:このパターンの目的の説明に基づいて、説明をコードと組み合わせてより明確にします。なぜなら 同じウィキペディアでは、多くの言語に対してそれを一般化しているため、説明は例から分離されています。
command
このパターンには 4 つの用語があります。ここではコマンド ( )、コマンド受信者 (
receiver
)、コマンド呼び出し元 (
invoker
)、およびクライアント ( )という 4 つの用語があると考えてください
client
。同じウィキペディアから例を取り上げますが、これはかなり許容範囲です。
このタスクは、Light
ライトをオンにすることとオフにするという 2 つのことを実行できる クラスです。パターン的には「コマンドレシーバー(
receiver
)」 となります。
public class Light{
public Light(){ }
public void turnOn(){
System.out.println("The light is on");
}
public void turnOff(){
System.out.println("The light is off");
}
}
実行され、「command ( )」 パターン
execute()
で呼び出される 1 つのメソッドを含むインターフェイスを作成しましょう。
command
public interface Command{
void execute();
}
クラス スキルの実行をカプセル化する必要があります
Light
。これを行うには、インターフェイスを実装し
TurnOnLightCommand
、コンストラクターでクラス オブジェクトを受け入れるクラスを作成します。そして、それぞれが 1 つのアクションだけを実行します。1 つはメソッドを呼び出し、もう 1 つは を呼び出します。
TurnOffLightCommand
Command
Light
turnOn()
turnOff()
public class TurnOnLightCommand implements Command{
private Light theLight;
public TurnOnLightCommand(Light light){
this.theLight=light;
}
public void execute(){
theLight.turnOn();
}
}
public class TurnOffLightCommand implements Command{
private Light theLight;
public TurnOffLightCommand(Light light){
this.theLight=light;
}
public void execute(){
theLight.turnOff();
}
}
次に、これらのカプセル化されたオブジェクト メソッドを受け入れるオブジェクトを作成します
Light
。パターン的にはコマンド呼び出し元(呼び出し元)と呼ばれます。これを呼び出して、作成されたメソッドとで使用される
Switch
コンストラクター内の変数を受け入れられるようにしましょう。
Command
flipUp()
flipDown()
public class Switch {
private Command flipUpCommand;
private Command flipDownCommand;
public Switch(Command flipUpCommand,Command flipDownCommand){
this.flipUpCommand=flipUpCommand;
this.flipDownCommand=flipDownCommand;
}
public void flipUp(){
flipUpCommand.execute();
}
public void flipDown(){
flipDownCommand.execute();
}
}
そしてもちろん、一般的に何が起こっているのかを理解するためにそれらを使用するクラスを作成します。これは main メソッドと呼ばれ、すべてのアクションが実行されます。
public class TestCommand{
public static void main(String[] args){
Light l=new Light();
Command switchUp=new TurnOnLightCommand(l);
Command switchDown=new TurnOffLightCommand(l);
Switch s=new Switch(switchUp,switchDown);
s.flipUp();
s.flipDown();
}
}
出力は次のようになります。
"The light is on"
"The light is off"
これはどこに適用されますか?
これが必要な理由と目的は明確です。つまり、特定の実行を分離する必要がある状況では、これは非常に便利です。そのため、一部の機能の使用は特定の実装に依存せず、システムに損傷を与えることなく変更できます。このようなもの...) コメントを書いてください。話し合ってください。もっとシンプルにして、より良く伝えることができるかもしれません。必要に応じてすべて編集します) 初めて読む人にとって、できるだけ明確になるように。まあ、記事を気に入ってくれた人は誰でもそれに「+」を付けてください:) これは私にとって重要です) 時間が経つにつれて、 やその他についてもっと書きたいと思い
Builder
ます
Singleton
。
私の他の記事も参照してください。
GO TO FULL VERSION