目次
構造
プロキシ モードは 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();
}
}
長所と短所
アドバンテージ
-
プロキシ モードは、クライアントとターゲット オブジェクトの間の仲介の役割を果たし、ターゲット オブジェクトを保護します。
-
プロキシ オブジェクトは、ターゲット オブジェクトの機能を拡張できます。
-
プロキシ モードは、クライアントをターゲット オブジェクトから分離することができ、システムの結合をある程度まで軽減します。
欠点がある
-
システムの複雑さの増加。