代理模式
代理模式屬於結構型模式
定義:爲其他對象提供一種代理以控制對這個對象的訪問
代理模式就是在操作原對象的時候,多出來一個代理類,用來對原對象的訪問進行控制和替代原對象進行一些操作
模式類圖
角色
- 抽象接口:able,定義業務接口
- 被代理類:Source
- 代理類:Proxy,用來對原對象的訪問進行控制和替代原對象進行一些操作
- 客戶端:Client,負責調用代理類
優點
- 職責清晰,被代理類只關心實際的業務邏輯,不關心其他事情
- 高擴展性,被代理類可以隨意更改,不會影響到代理類對其的訪問控制
抽象接口
被代理類和代理類都實現此接口
/**
* @author: linan
* @date: 2020/5/25 10:20
* @description: 手機接口
*/
public interface Phoneable {
/**
* 打電話
*/
void call();
}
被代理類
實現Phoneable接口
/**
* @author: linan
* @date: 2020/5/25 10:19
* @description: 被代理類
*/
public class Phone implements Phoneable {
@Override
public void call() {
System.out.println("打電話");
}
}
代理類
實現Phoneable接口,持有被代理類實例,提供validate()對被代理類的訪問進行控制
/**
* @author: linan
* @date: 2020/5/25 10:19
* @description: 被代理類
*/
public class Proxy implements Phoneable {
private Phone phone = new Phone();
@Override
public void call() {
if(validate()){
phone.call();
}
System.out.println("結束通話");
}
/**
* 檢查手機號
* @return
*/
private Boolean validate(){
System.out.println("手機號驗證通過");
return Boolean.TRUE;
}
}
驗證
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.call();
}
輸出
手機號驗證通過
打電話
結束通話
代理模式與裝飾器模式的區別,代理模式主要是對原對象的訪問進行控制,而裝飾器模式主要是爲了對原對象增加新的功能
參考:設計模式之禪:https://www.kancloud.cn/sstd521/design/193540