代理模式屬于結(jié)構(gòu)形設計模式
為什么會用到代理模式:
例如,單身的碼農(nóng)找對象時會請媒婆來幫助自己,這時候就使用到了代理模式,碼農(nóng)就是一個被代理類,而媒婆就是一個代理類,客戶端只需要調(diào)用代理類(媒婆)的方法就可以實現(xiàn)被代理類(碼農(nóng))的需求。
靜態(tài)代理: 先上代碼
// 首先創(chuàng)建一個接口(人類)
public interface StaticProxyPerson {
// 定義接口‘找對象’
void findLove();
}
/**
* 定義程序員類 實現(xiàn)StaticProxyPerson接口
*/
public class ChengXuYan implements StaticProxyPerson {
/**
* 實現(xiàn)'找對象'接口
*/
public void findLove() {
System.out.println("被代理類: 漂亮");
}
}
/**
* 代理類 '媒婆'
*/
public class MeiPo implements StaticProxyPerson {
private StaticProxyPerson target;
public MeiPo(StaticProxyPerson target) {
this.target = target;
}
public void findLove() {
System.out.println("代理類: 開始給被代理類找對象");
System.out.println("代理類: 找到了,名字叫翠花,你看看怎么樣? @被代理類");
target.findLove();
System.out.println("代理類: 那好,我再去找翠花聊聊");
}
}
public static void main(String[] args) {
// 被代理類
ChengXuYan chengXuYan = new ChengXuYan();
// 代理類
MeiPo meiPo = new MeiPo(chengXuYan);
meiPo.findLove();
}
最后運行結(jié)果:
代理類: 開始給被代理類找對象
代理類: 找到了,名字叫翠花,你看看怎么樣? @被代理類
被代理類: 漂亮
代理類: 那好,我再去找翠花聊聊
以上就是java靜態(tài)代理的實現(xiàn), 但是在實現(xiàn)了業(yè)務的同時也有很多缺點:
- 當被代理類增加新的方法時 代理類也要同時增加 違背了開閉原則