設計模式 _第六招式_代理模式
阿新 • • 發佈:2018-11-07
一、定義
代理模式也叫委託模式,為其它物件提供一種代理以控制對這個物件的訪問,它是一項基本設計技巧。許多其他的設計模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,在應用中,代理模式提供非常好的訪問控制。在一些著名的開源軟體中也經常見到它的身影,如Struts2 的from元素對映就採用了代理模式。
二、程式碼演示
- 代理模式通用類圖
Subject抽象主體角色
抽象主體可以是抽象類也可以是介面,是一個最普通的業務型別定義,無特殊要求
public interface Subject {
//定義一個方法
public void request();
}
- RealSubject具體的主體角色
也叫被委託角色、被代理角色。是業務邏輯的具體執行者。
public class RealSubject implements Subject {
//實現方法
public void request(){
//業務邏輯處理
System.out.println("RealSubject 業務邏輯處理");
}
}
- Proxy代理主體角色
也叫做委託類、代理類。他負責對真實角色的應用,把所有抽象主題類定義的方法限制委託給真實主體角色實現,並且在真實主題角色處理完畢前後做預處理和善後工作。
public class Proxy implements Subject {
//要代理的哪個實現類
private Subject subject = null ;
//預設被代理者
public Proxy(){
this.subject = new Proxy();
}
//通過建構函式傳遞代理者
public Proxy(Object ... objects){
}
public Proxy(Subject _subject){
this.subject = _subject;
}
@Override
public void request() {
this.before();
this.subject.request();
this.after();
}
//預處理
public void before(){
System.out.println("預處理");
}
//善後處理
private void after(){
System.out.println("善後處理");
}
}
- 場景類
public class Client {
public static void main(String args[]){
Proxy proxy = new Proxy(new RealSubject());
proxy.request();
}
}
三、優點
- 職責清晰
真正的角色就是實際的業務邏輯,不用關心其他非本職的事務,通過後期代理統一完成事務。
- 高擴充套件性
具體主題角色是隨時可以變化的,只要實現了介面,那代理類完全不用做任何修改。
四、缺點
五、應用場景
代理模式的使用場景非常多,可以看看Spring AOP ,是一個非常典型的動態代理。
六、注意事項