プロキシ モード - 静的プロキシ

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 で終了しました

 仲介業者を通さず家主に直接行く場合:

おすすめ

転載: blog.csdn.net/Yoke______/article/details/123016221