プロキシモード (Java)

目次

構造

静的プロキシの場合

 コード

発券業務

でんしゃのりば

プロキシクラス

テストクラス

長所と短所

アドバンテージ

欠点がある


構造

プロキシ モードは 3 つの役割に分かれています。

  • 抽象サブジェクト (Subject) クラス: 実サブジェクトおよびプロキシ オブジェクトによって実装されるビジネス メソッドを、インターフェイスまたは抽象クラスを通じて宣言します。

  • Real Subject (Real Subject) クラス: 抽象的なサブジェクトで具体的な業務を実現し、プロキシ オブジェクトによって表現される実オブジェクトであり、参照される最終オブジェクトです。

  • プロキシ (プロキシ) クラス: 実際のテーマと同じインターフェイスを提供します。これには、実際のテーマへの参照が含まれており、実際のテーマの機能にアクセス、制御、または拡張できます。

静的プロキシの場合

【例】駅での切符の販売

電車の切符を買いたい場合は、駅に行って切符を買って、電車に乗って駅まで行き、列に並んで待つという一連の操作が必要で、明らかに面倒です。また、駅には多くの場所に営業所があるので、切符を買うために営業所に行く方がはるかに便利です。この例は実際には典型的なエージェント モデルであり、駅がターゲット オブジェクトであり、販売代理店がエージェント オブジェクトです。

 コード

発券業務

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 售票类
 * @date: 2023/7/20 15:28
 */
public interface SellTickets {
    void sell();
}

でんしゃのりば

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 火车站类
 * @date: 2023/7/20 15:29
 */
public class TrainsStation implements SellTickets {

    @Override
    public void sell() {
        System.out.println("火车站买票");
    }

}

プロキシクラス

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 售票代理
 * @date: 2023/7/20 15:30
 */
public class TicketsProxy implements  SellTickets {

    private final TrainsStation trainsStation = new TrainsStation();

    @Override
    public void sell() {
        System.out.println("收取售票手续费");
        trainsStation.sell();
    }

}

テストクラス

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 测试类
 * @date: 2023/7/20 15:27
 */
public class Client {
    public static void main(String[] args) {

        // 实例化代理商
        TicketsProxy proxy = new TicketsProxy();
        // 代理商买票
        proxy.sell();

    }

}

長所と短所

アドバンテージ

  • プロキシ モードは、クライアントとターゲット オブジェクトの間の仲介の役割を果たし、ターゲット オブジェクトを保護します

  • プロキシ オブジェクトは、ターゲット オブジェクトの機能を拡張できます。

  • プロキシ モードは、クライアントをターゲット オブジェクトから分離することができ、システムの結合をある程度まで軽減します

欠点がある

  • システムの複雑さの増加。

おすすめ

転載: blog.csdn.net/qq_51179608/article/details/131852257