ModifyCheckingAccountCmd インターフェースは、コマンド・パッケージ内のほかのインターフェースを拡張することに加えて、いくつかのコマンド特定のメソッドを定義します。 これらのコマンド特定のメソッドは、ModifyCheckingAccountCmdImpl クラス内に実装されています。
コマンドをインスタンス化する方法を指定する必要があります。 コマンド・パッケージはメカニズムを指定しないので、使用するアプリケーシ ョンに最適な技法を選択することができます。 もっとも速く効果的な技法は、コンストラクターの使用です。 もっとも柔軟な技法はファクトリーの使用です。 また、コマンドは JavaBeans コンポーネントとして内部的に実装されるので、標準の Beans.instantiate メソッドを使用できます。 ModifyCheckingAccountCmd コマンドはコンストラクターを使用します。
... public class ModifyCheckingAccountCmdImpl extends TargetableCommandImpl implements ModifyCheckingAccountCmd { // Variables ... // Constructors // First constructor: relies on the default target policy public ModifyCheckingAccountCmdImpl(CommandTarget target, float newAmount) { amount = newAmount; checkingAccount = (CheckingAccount)target; setCommandTarget(target); } // Second constructor: allows you to specify a custom target policy public ModifyCheckingAccountCmdImpl(CommandTarget target, float newAmount, TargetPolicy targetPolicy) { setTargetPolicy(targetPolicy); amount = newAmount; checkingAccount = (CheckingAccount)target; setCommandTarget(target); } ... }
このコード例は、コマンドの 2 つのコンストラクターを表示しています。 これらの間の違いは、最初のコードがコマンドのターゲットを判別する のにデフォルトのターゲット・ポリシーを使用し、2 番目のコードはカ スタム・ポリシーを指定することを許可していることです。 ターゲットとターゲット・ポリシーについて詳しくは、『ターゲット およびターゲット・ポリシー』を参照してください。
コンストラクターは両方とも、CommandTarget オブジェクトを引数としてとり、それを CheckingAccount タイプにキャストします。 CheckingAccount インターフェースは、CommandTarget インターフェースと EJBObject の両方を拡張します (160 ページの図 80 を参照)。 その結果得られる checkingAccount オブジェクトは、Bean のリモート・ インターフェースを使用して、望ましいサーバーへコマンドを送付します。 (CommandTarget オブジェクトについて詳しくは、159 ページの『コマン ド・ターゲットの書き込み (サーバー)』を参照してください。
... public class ModifyCheckingAccountCmdImpl extends TargetableCommandImpl implements ModifyCheckingAccountCmd { // Variables ... // Constructors ... // Methods in ModifyCheckingAccountCmd interface public float getAmount() { return amount; } public float getBalance() { return balance; } public float getOldBalance() { return oldBalance; } public float setBalance(float amount) { balance = balance + amount; return balance; } public float setBalance(int amount) { balance += amount ; return balance; } public TargetPolicy getCmdTargetPolicy() { return getTargetPolicy(); } public void setCheckingAccount(CheckingAccount newCheckingAccount) { if (checkingAccount == null) { checkingAccount = newCheckingAccount; } else System.out.println("Incorrect Checking Account (" + newCheckingAccount + ") specified"); } public CheckingAccount getCheckingAccount() { return checkingAccount; } ... }
ModifyCheckingAccountCmd コマンドは当座預金上で実行されます。 コマンドは JavaBeans コンポーネントとして実装されているので、標準の JavaBeans 技法を使用して、コマンドの入出力プロパティーを管理します。 例えば、(setCheckingAccount のような) セット・メソッドで入力プロパティーを初期化し、(getCheckingAccount のような) ゲット・メソッドで出力プロパティーを取得します。 ゲット・メソッドは、コマンドの実行メソッドが呼び出されるまで機能しません。