AOP を明確にする前に、まずプロキシ モデルについて徹底的に調査する必要があります。
プロキシ モードは、静的プロキシと動的プロキシに分けられます。動的エージェントには、JDK エージェントと Cglib が含まれます
この記事では主に静電気剤について説明します。
プロキシモード
生活から始めて、私は家を借りたい人間です、家を借りたいと思って住宅仲介業者を探します、たくさんの家があります。家主を見つけるのは難しく、家主のスペースは限られているため、私は家主を探しません。大家さんとしては、家を貸したいだけで、入居者を探す気もないし、入居者に家を案内したり、その他のことをしたいわけでもありません。私と家主のためには仲介者が必要です。このエージェントは家主に代わって私に家を貸してくれました。エージェントとは家主の代理人です。エージェントと家主は家を借りるという共通の活動を行い、最終的なタスクの完了はエージェントに任せます。
エージェントモードには以下が含まれます
- 抽象ロール: ロールの一部の動作は、通常、抽象クラスとインターフェイスを使用して実装されます。
- 実際の役割: 代理人 (家主)
- エージェントの役割: 現実のキャラクターのエージェントとして機能し、現実のキャラクターの行動を補完します (仲介者)
- クライアント: エージェントにアクセスできる人 (テナントである私)
プロキシ モードの利点:
- 公務を意識することなく、現実のキャラクターの操作をより純粋に行うことができます。
- 公的業務を代理店に引き継ぎ、業務の分業化を実現
- 公共サービスが拡大すると一元管理が容易になる
- 元のコードを変更せずに、他の操作を追加できます。
静的プロキシのコードを手描きする
抽象的な文字
package com.heaboy.proxyExcise.staticExcise;
/**
* @Author:XK
* @Date: Created in 11:20 2022/2/19
* @Description:静态代理的抽象行为
**/
public interface Rent {
public void rent();
}
本当の性格
package com.heaboy.proxyExcise.staticExcise;
/**
* @Author:XK
* @Date: Created in 11:23 2022/2/19
* @Description:静态代理的真实角色,也就是被代理的对象,租房模型中的房东
**/
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东出租房子");
}
}
エージェントの役割
package com.heaboy.proxyExcise.staticExcise;
/**
* @Author:XK
* @Date: Created in 11:24 2022/2/19
* @Description:代理对象,代理真实角色,租房模型的中介所
**/
public class StaticProxy {
private Host host;
public StaticProxy() {
};
public StaticProxy(Host host) {
this.host = host;
}
//代理房东的出租房子行为,并且可以加一下附加操作
public void rent(){
System.out.println("我是中介,出租我代理房东的房子");
host.rent();
}
//甚至可以追加一些其他的行为
public void kanfang(){
System.out.println("我是中介,带客人看我代理房东的房子");
}
}
家主の行動を認識するだけでなく、家主の行動を強化し、家をチェックする追加の行動も備えています。
クライアント
package com.heaboy.proxyExcise.staticExcise;
/**
* @Author:XK
* @Date: Created in 11:27 2022/2/19
* @Description:客户端获取到代理对象,出租模型中代表房客
**/
public class Client {
public static void main(String[] args) {
StaticProxy staticProxy = new StaticProxy(new Host());
staticProxy.kanfang();
staticProxy.rent();
}
}
操作結果:
私はエージェントです。私はクライアントに家主の家を案内しています。私
はエージェントです。私は家主の家を借りています。
家主は家を借りています。プロセスは終了コード 0 で終了しました
仲介業者を通さず家主に直接行く場合: