コマンドモードは、多くのコードを読んだ後、その一般的な原則を漠然と習得していると思います。実際のプログラミングで。コマンドモードは実際には非常に具体的なモデルではなく、まさにこの柔軟性が少し混乱していると感じさせるこの柔軟性です。
コマンド定義
多くのコマンドモードコードは、グラフィカルインターフェイスをターゲットにしています。
これらのコマンドをクラスにカプセル化し、ユーザー(発信者)がこのクラスで動作します。 (発信者)は、ドキュメントを開くコードを直接指し、コマンドモードを使用します。
明らかに、これを行うことの利点は、パッケージの特性に準拠し、カップリングを減らすことです。
コマンドモードから、設計モードの「一般的な問題」もわかりました。単純な問題を複雑にしたいと思われ、もちろん、さまざまなクラスに第三者を追加することが好きです。コードの再利用。
コマンドモードの使用方法
特定のコマンドモードコードはさまざまです。これは、コマンド、さまざまなシステムをカプセル化するさまざまな方法があるためです。次の例は、コレクションリストにコマンドをカプセル化することです。
典型的なコマンドモードには、インターフェイスが必要です。インターフェイスには、「オブジェクトへのコマンド/リクエストをカプセル化する」という統一された方法があります。
コードコピーは次のとおりです。
パブリックインターフェイスコマンド{
public abstract void execute();
}
特定のコマンド/リクエストコードは、インターフェイスコマンドを実装することであり、以下に3つの特定のコマンドがあります。
コードコピーは次のとおりです。
パブリッククラスエンジニアはコマンドを実装しています{
public void execute(){
//エンジニアのコマンドを行います
}
}
パブリッククラスプログラマーを実装するコマンド{
public void execute(){
//プログラマーのコマンドを行います
}
}
パブリッククラスの政治家実装コマンド{
public void execute(){
//政治家の命令を行います
}
}
いつものように、これらの3つのコマンドを直接呼び出すことができますが、コマンドモードを使用して、それらをカプセル化してブラックボックスリストに投げ込む必要があります。
コードコピーは次のとおりです。
パブリッククラスプロデューサー{
public static list produceRequests(){
queue = new ArrayList();
queue.add(new domesticingineer());
queue.add(new Politician());
queue.add(new programmer());
キューを返します。
}
}
これらの3つのコマンドがリストに入った後、彼らは後で外出した場合、誰がエンジニアであり、誰がプログラマーを呼び出すかを知ることができません。
コードコピーは次のとおりです。
パブリッククラスのtestcommand {
public static void main(string [] args){
リストqueue = producer.produerquests();
for(iterator it = queue.iterator(); it.hasnext();)
//リストの中間およびその他の機能を取り出しますが、1つの機能が100%正しいことを確認できません。
//少なくともインターフェイスコマンドの「息子」です。
((command)it.next())。execute();
}
}
発信者は基本的にインターフェイスを扱い、特定の実装を反映していません。発信者TestCommandでコードを変更する必要はありません。
上記のコードのコア原則を理解した後、特に発信者と特定のコマンドを分離する方法では、誰もが使用している必要があります。 。このアプローチは、デモンストレーション専用です。
コマンドモードを使用する正当な理由は、元に戻す機能を実装できるためでもあり、各特定のコマンドは、実行したばかりのアクションを覚えて、必要に応じて復元できるためです。
コマンドモードは、インターフェイス設計で広く使用されています。 Java Swingのコマンドは、Javaにはインターフェイスデザインのパフォーマンスがないため、インターネットには多くの例があります。