1. 程式人生 > 資訊 >《英雄聯盟》v12.5 更新 :破艦者裝備調整,小蜜蜂面板加入

《英雄聯盟》v12.5 更新 :破艦者裝備調整,小蜜蜂面板加入

介紹

建立已有物件的代理,新增相應的控制後便於向外界提供訪問。

意圖

為其他物件提供一種代理以控制原物件的訪問。

解決

避免直接訪問物件(安全問題,許可權問題等),相當於為原物件新增訪問控制層。

優點

  1. 擴充套件性
  2. 職責清晰

缺點

  1. 在原物件上新增一層訪問控制,會使請求變慢

使用場景

  1. 介面呼叫許可權
  2. 防火牆
  3. 前置機

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通過智行購票
// 該使用者無法通過【智行】購票