介紹
代理模式是結(jié)構(gòu)性模式徘铝,它通過(guò)引入一個(gè)新的對(duì)象(如小圖片和遠(yuǎn)程代理對(duì)象)來(lái)實(shí)現(xiàn)對(duì)真實(shí)對(duì)象的操作或者將新的對(duì)象作為真實(shí)對(duì)象的一個(gè)替身衍锚。
我們現(xiàn)實(shí)生活中也有許多代理模式的影子晴及。例如朋友出國(guó)旅游虚倒,我們可以托朋友幫忙買(mǎi)些東西诊笤∠敌常或者,我們點(diǎn)外賣(mài)讨跟,配送員替我們?nèi)ト〔偷鹊取?br>
結(jié)構(gòu)圖
一共有三個(gè)角色
- Subject(抽象主題角色)
- Proxy(代理主題角色)
- RealSubject(真實(shí)主題角色)
時(shí)序圖
案例
這邊的配送員就是代理角色纪他,顧客是真實(shí)角色,配送員完成顧客到店取貨的步驟晾匠。
抽象主題角色
public abstract class Subject {
public abstract void getFood();
}
顧客
public class Customer extends Subject {
@Override
public void getFood() {
System.out.println("客戶(hù)拿到餐啦!");
}
}
配送員
public class DeliveryMan extends Subject {
private Customer customer = new Customer();
public void goShop(){
System.out.println("去商家取餐!");
}
@Override
public void getFood() {
goShop();
customer.getFood();
finish();
}
public void finish() {
System.out.println("結(jié)束送餐!");
}
}
測(cè)試
public class Client {
public static void main(String[] args) {
Subject subject = new DeliveryMan();
subject.getFood();
}
}
測(cè)試結(jié)果
總結(jié)
上面的案例只是簡(jiǎn)單的代理模式茶袒,實(shí)際開(kāi)發(fā)中要復(fù)雜許多。
而且代理有還許多種凉馆,例如遠(yuǎn)程代理(Remote Proxy)薪寓、 虛擬代理(Virtual Proxy)等等。
還有一種較為高級(jí)的代理模式叫做動(dòng)態(tài)代理澜共,Spring AOP就是采用動(dòng)態(tài)代理模式向叉。有興趣的可以