Java 動的エージェント パターン エージェント: ロールは、特定の機能を達成するための別のロールを表します。
たとえば、メーカー、仲介業者、顧客の関係です。顧客が製品を購入するとき、顧客はメーカーと直接取引するわけではありません。また、顧客は仲介業者とのみ取引し、仲介業者は製品を梱包することができます。一部のアフターサービスも提供されます。
エージェント パターンには 3 つの役割があります。 1. 抽象的なサブジェクトの役割 2. エージェントのサブジェクトの役割 3. 実際のエージェントの役割
静的プロキシの実際を見てみましょう。
タンクを例に説明します。
抽象的なテーマの役割: 移動可能
パブリック インターフェイス 移動可能 {
無効な移動();
}
public class TanktimeProxy は Moveable{ を実装します
プライベート移動可能 t;
public TanktimeProxy(Moveable t) {
素晴らしい();
this.t = t;
}
@オーバーライド
public void move() {
長い時間1 = System.currentTimeMillis();
System.out.println("time1="+time1);
t.move();
長い時間2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("実行時間は次のとおりです:"+(time2-time1));
}
}
public class Tank は Moveable{ を実装します
@オーバーライド
public void move() {
System.out.println("戦車が動いています....");
}
}
パブリック クラス TestTank {
public static void main(String[] args) {
タンク t = 新しいタンク();
移動可能な移動 = new TanktimeProxy(t);
移動.移動();
}
}
次に、TanK の move() メソッドの前後に日記を追加したいと思います。
この機能を実装するには別のクラスを作成する必要があります。
public class TanklogProxy は Moveable{ を実装します
プライベート移動可能 t;
public TanklogProxy(Moveable t) {
素晴らしい();
this.t = t;
}
@オーバーライド
public void move() {
System.out.println("移動開始....");
t.move();
System.out.println("移動終了....");
}
}
パブリック クラス TestTank {
public static void main(String[] args) {
タンク t = 新しいタンク();
移動可能な移動 = new TanktimeProxy(t);
移動可能な movet = new TanklogProxy(move);
movet.move();
}
}
Tank の move() メソッドが呼び出される前と後にさらに関数を追加したい場合、さらに多くのエージェント テーマ ロールを記述する必要がありますか? これにより、コードが太くなりすぎて保守が困難になります。どのような方法がありますか?それを解決するために使用できるでしょうか? 答えは「はい」です。すべてのプロキシ オブジェクトをプロキシするエージェント テーマのロールを動的に生成できます。
記事の最後に、IBM とボーイング 777 というプログラマーのジョークの引用をいくつか紹介したいと思います。
ボーイング 777 は、IBM が全面的に提供した機器を使用し、コンピューター仮想現実だけで設計および製造された初めての航空機です。試験飛行前、ボーイング社の社長はIBMの技術責任者を試験飛行に参加するよう熱心に誘ったが、上司は「ああ、大変光栄なことですが、その日は妻の誕生日なので…」と…。
これを聞いたボーイング社のCEOは「卑怯者、試験飛行の日程をまだ言っていない!」と激怒した。