《英雄聯盟》v12.5 更新 :破艦者裝備調整,小蜜蜂面板加入
阿新 • • 發佈:2022-03-05
介紹
建立已有物件的代理,新增相應的控制後便於向外界提供訪問。
意圖
為其他物件提供一種代理以控制原物件的訪問。
解決
避免直接訪問物件(安全問題,許可權問題等),相當於為原物件新增訪問控制層。
優點
- 擴充套件性
- 職責清晰
缺點
- 在原物件上新增一層訪問控制,會使請求變慢
使用場景
- 介面呼叫許可權
- 防火牆
- 前置機
UML
示例
Ticketing.java
package cn.geoaryblog.design.cretedg.proxy;
public interface Ticketing {
String buy();
}
OfficialTicketing.java
package cn.geoaryblog.design.cretedg.proxy;
public class OfficialTicketing implements Ticketing {
@Override
public String buy() {
return "官方12306購票系統-票價【100元】";
}
}
ProxyTicketing.java
package cn.geoaryblog.design.cretedg.proxy; public class ProxyTicketing implements Ticketing { private OfficialTicketing officialTicketing; private int userid; public ProxyTicketing(int userid){ this.userid = userid; } @Override public String buy() { // 通過代理類對被代理物件擴充套件(控制) if(userid != 234){ return "該使用者無法通過【智行】購票"; } if(officialTicketing == null){ officialTicketing = new OfficialTicketing(); } String thirdPartyTitle = "智慧你的旅行-智行"; String thirdPartyTicket = "手續費【20元】,原價【100元】,總計【120元】"; return thirdPartyTitle+"\n"+thirdPartyTicket; } }
Client.java
package cn.geoaryblog.design.cretedg.proxy; public class Client { public static void main(String[] args) { ProxyTicketing proxy1 = new ProxyTicketing(234); ProxyTicketing proxy2 = new ProxyTicketing(123); System.out.println("使用者234通過智行購票"); System.out.println(proxy1.buy()); System.out.println(); System.out.println("使用者123通過智行購票"); System.out.println(proxy2.buy()); } } // 輸出結果 // 使用者234通過智行購票 // 智慧你的旅行-智行 // 手續費【20元】,原價【100元】,總計【120元】 // // 使用者123通過智行購票 // 該使用者無法通過【智行】購票