Javaデザインパターンにおけるコマンドパターンの説明例
コマンド モードはコマンドのカプセル化です。コマンド モードのクラス図の基本構造を以下に紹介します。Java 設計モードのコマンド モードの知識に興味のある方は、一緒に見てください。
定義: リクエストを An にカプセル化します。このオブジェクトを使用すると、さまざまなリクエスト、キューまたはログリクエストでクライアントをパラメータ化し、コマンドの元に戻す機能とやり直し機能を提供できます。
タイプ: 動作パターン
クラス図:
コマンドパターンの構造
その名の通り、コマンドパターンはコマンドをカプセル化したものです。コマンド パターン クラス図:
コマンド クラス: これは、実行する必要があるコマンドを宣言するクラスです。一般に、コマンドを実行するには、execute メソッドを外部に公開する必要があります。
ConcreteCommand クラス: Command クラスの実装クラス。抽象クラスで宣言されたメソッドを実装します。
クライアントクラス: 最後のクライアント呼び出しクラス。
上記の 3 つのクラスの機能は比較的理解しやすいと思いますが、Invoker クラスと Recevier クラスに注目してみましょう。
Invoker クラス: Invoker、コマンドの呼び出しを担当します。
Receiver クラス: コマンドの受信と実行を担当する受信者。いわゆるコマンドのカプセル化は、一連の操作をメソッドに記述するだけであり、クライアントはそれを呼び出す必要があります。必要なのは、Concretecommand クラスと Client クラスだけです。コマンドのカプセル化が完了したら、さらに柔軟性を高めるために、適切な抽象化を行うために別の Command クラスを追加できます。この呼び出し側と受信側の機能は何ですか。
実際、別の角度から考えることもできます。いくつかの操作を他の人が呼び出すためのコマンドとして単純にカプセル化した場合、どのようにしてそれをパターンと呼ぶことができるでしょうか?動作パターンとして、コマンド パターンはまず低結合を実現する必要があります。低結合により柔軟性が向上します。呼び出し側と受信側の 2 つの役割を追加する目的はまさにこの目的のためです。コマンド モードの一般的なコードは次のとおりです:
class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void action(){ this.command.execute(); } } abstract class Command { public abstract void execute(); } class ConcreteCommand extends Command { private Receiver receiver; public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } public void execute() { this.receiver.doSomething(); } } class Receiver { public void doSomething(){ System.out.println("接受者-业务逻辑处理"); } } public class Client { public static void main(String[] args){ Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); //客户端直接执行具体命令方式(此方式与类图相符) command.execute(); //客户端通过调用者来执行命令 Invoker invoker = new Invoker(); invoker.setCommand(command); invoker.action(); } }
コードを通して、呼び出し時の実行シーケンスは、最初に呼び出し側クラス、次にコマンド クラス、最後に受信側クラスであることがわかります。言い換えれば、コマンドの実行は 3 つのステップに分割され、その結合度はすべての操作をクラスにカプセル化するよりもはるかに低くなります。これがコマンド パターンの本質です。つまり、コマンドの呼び出し側と実行側が分離されます。双方とも、相手方がどのように行動するかを気にする必要はありません。
コマンド モードの長所と短所
まず第一に、コマンド モードは優れたカプセル化を備えています。クライアントにとって、機能が必要な場合は、各コマンドがカプセル化されており、対応するコマンドを呼び出す必要はありません。コマンドがどのように実行されるかを理解してください。たとえば、新しいファイルの作成、ファイルのコピー、ファイルの削除などの一連のファイル操作コマンドがあります。これら 3 つの操作がコマンド クラスにカプセル化されている場合、クライアントはこれら 3 つのコマンド クラスが存在することだけを知る必要があります。コマンド クラスにカプセル化されたロジックについては、クライアントは知る必要はありません。 第 2 に、コマンド モードは非常にスケーラブルです。コマンド モードでは、通常、受信クラスが最も基本的な操作をカプセル化し、新しいコマンドが追加されると、コマンド クラスがこれらの基本操作を再カプセル化します。コマンド クラスは通常、最初から開始されることはありません。呼び出されるレシーバー クラスと呼び出されるコマンド クラスの数は非常に多くなります。コードの再利用性は非常に優れています。たとえば、ファイル操作中にファイルを切り取るコマンドを追加する必要がある場合、ファイルのコピーとファイルの削除の 2 つのコマンドを組み合わせるだけで済み、非常に便利です。
最後に、コマンド モードの欠点について話しましょう。つまり、コマンドが多い場合、開発は頭の痛い問題になります。特に、コマンド モードを使用する場合、多くの単純なコマンドは、コマンドがどれほど単純であっても、それをカプセル化するためにコマンド クラスを作成する必要があります。
コマンドモードの適用可能なシナリオ
リクエスト/レスポンスモードの機能のほとんどでは、コマンドモードの定義にあるように、コマンドモードの方が次のような機能を実現するのに適しています。ログ記録と操作の取り消しが便利です。
概要
ボトム 場合によっては、これはすべての開発者にとって非常に複雑な問題です。需要の変化が予測されるため、システムの柔軟性と拡張性を確保するために特定の設計パターンが使用されることがありますが、逆に、コードを変更すると、予期せぬ需要が発生することがよくあります。使用されたデザイン パターンは逆効果で、プロジェクト チーム全体から不満の声が上がりました。プログラマーなら誰しもそのような例に遭遇したことがあると思います。したがって、アジャイル開発の原則に基づいて、プログラムを設計するときに、現在のニーズに応じて特定のパターンを使用せずにうまく解決できる場合は、デザインパターンの導入は難しくないため、導入すべきではありません。 . 、本当に使用する必要がある場合は、システムを改良してこの設計パターンを導入できます。コマンド モードを例に挙げます。一般的に、リクエストの応答操作はコマンド モードではなく、メソッドにカプセル化されます。この設計をパターンレベルに引き上げるかどうかは別途検討する必要があります。コマンドパターンを使用すると、呼び出し側と受信側の 2 つの役割が導入され、本来 1 か所にあったロジックが分散されてしまうためです。を 3 つのクラスに分けて設計する場合、コストに見合う価値があるかどうかを考慮する必要があります。
以上がJavaデザインパターンにおけるコマンドパターンの説明例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。
