代理模式包括兩種角色:
1.抽象主題(Subject):抽象主題是一個接口,該接口是實際主題和
它的代理所共享的接口(代理和實際主題實現了共同相同的接口)
2.實際主題(RealSubject):實際主題是實現抽象主題接口的類。
實際主題的實例是代理角色(Proxy)要代理的對象。
3.代理(Proxy):代理是實現抽象主題接口的類
(代理和實際主題實現了相同的接口)。代理含有主題接口聲明的變量
,該變量用來存放RealSubject角色的實例的引用,這樣一來,
代理的實例就可以控制對它所包含的RealSubject角色的實例的訪問,
即可以控制對它所代理的對象的訪問,達到了代理的目的。
代理模式的優點:
1.代理模式可以屏蔽用戶真正請求的對象,
使用戶程序和真正的對象之間實現解耦。
2.使用代理來擔當那些創建耗時的對象的替身。
適合使用代理模式的情景:
1.程序可能不希望用戶直接訪問該對象,而是提供一個特殊的對象
以控制對當前對象的訪問。
2.如果一個對象(例如很大的圖像)需要很長時間才能加載完成。
3.如果對象位於遠程主機上,需要爲用戶提供訪問該遠程對象的能力。
package day15.demo4;
public class TestProxy1 {
public static void main(String[] args) {
Company c = new Secretary();
c.makeBusiness();
}
}
interface Company{
abstract void makeBusiness();
}
class Secretary implements Company{
private Boss c;
public Secretary(){
super();
c = new Boss();
}
public void makeBusiness() {
c.makeBusiness();
}
}
class Boss implements Company{
public void makeBusiness() {
System.out.println("親愛的合作伙伴!有事記得找祕書!");
}
}