代理模式:爲其他對象提供一種代理以控制對這個對象的訪問
代理模式適用場合:第一,遠程代理,也就是爲一個對象在不同的地址空間提供局部代理,例如webservice應用;第二、虛擬代理,根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象;第三、安全代理,用來控制真實對象訪問時的權限;第四、智能指引,是指當調用真實的對象時,代理處理另外一些事。
舉個實例:大鵬出差在外,柳巖今天過生日,爲了不讓自己的女友掃興,大鵬拖快遞員幫忙送花,送娃娃,送巧克力,爲柳巖慶生。
定義一個公共接口 IGiveGift
public interface IGiveGift {
public void giveFlower();
public void giveDolls();
public void giveChocolate();
}
接着定義一個 Girl 類
public class Girl {
private String name;
public Girl(){
}
public Girl(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
接着定義一個實體類 Pursuit 繼承 IGiveGift
public class Pursuit implements IGiveGift {
protected Girl girl;
public Pursuit(Girl girl){
this.girl=girl;
}
@Override
public void giveFlower() {
System.out.println(girl.getName()+",送你玫瑰花");
}
@Override
public void giveDolls() {
System.out.println(girl.getName()+",送你芭比娃娃");
}
@Override
public void giveChocolate() {
System.out.println(girl.getName()+",送你德芙");
}
}
接着定義一個代理類 Proxy 繼承 IGiveGift
public class Proxy implements IGiveGift{
protected Pursuit pursuit;
//代理
public Proxy(Girl girl){
pursuit=new Pursuit(girl);
}
@Override
public void giveFlower() {
pursuit.giveFlower();
}
@Override
public void giveDolls() {
pursuit.giveDolls();
}
@Override
public void giveChocolate() {
pursuit.giveChocolate();
}
}
客戶端代碼
public static void main(String[] args) {
//代理模式
Girl girl=new Girl("柳巖");
Proxy dapeng=new Proxy(girl);
dapeng.giveChocolate();
dapeng.giveDolls();
dapeng.giveFlower();
}
這樣通過快遞代理,大鵬就可以將禮物送個自己的女朋友柳巖了。