定義:代理模式屬結(jié)構(gòu)型設(shè)計模式。為其他對象提供一種代理以控制對這個對象的訪問。
代理模式結(jié)構(gòu)圖

代理類結(jié)構(gòu)圖.jpg
在代理模式中有如下角色:
- ISubject: 抽象主題類,聲明真實主題與代理的共同接口方法。
- RealSubject:真實主題類,代理類所代表的真實主題??蛻舳送ㄟ^代理類間接地調(diào)用真實主題類的方法。
- Proxy:代理類,持有對真實主題類的引用,在其所實現(xiàn)的接口方法中調(diào)用真實主題類中相應(yīng)的接口方法執(zhí)行。
代碼
public interface IShop {
void buy();
}
public class BuyProxy implements IShop {
private IShop mShop;
public BuyProxy(IShop shop){
mShop = shop;
}
@Override
public void buy() {
mShop.buy();
}
}
public class Customer implements IShop {
@Override
public void buy() {
System.out.print("顧客購物");
}
}
public class BuyProxyTest {
private Customer mCustomer;
private BuyProxy mBuyProxy;
@Before
public void setUp() throws Exception {
mCustomer = new Customer();
mBuyProxy = new BuyProxy(mCustomer);
}
@Test
public void buy() throws Exception {
mBuyProxy.buy();
}
}
優(yōu)點
- 真是主題類就是實現(xiàn)實際的業(yè)務(wù)邏輯,不用關(guān)心其他的非本職工作。
- 任何主題類隨時和嗯呢該發(fā)生變化,但是因為它實現(xiàn)了公共接口,所以代理類可以不做任何修改就能夠使用。
代碼已上傳github