代理模式(proxy):為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪(fǎng)問(wèn)。
代理模式說(shuō)白了就是“真是對(duì)象”的代表,在訪(fǎng)問(wèn)對(duì)象時(shí)引入一定程度的間接性,因?yàn)檫@種間接性可以附加多種用途。
示例代碼:
先寫(xiě)一個(gè)業(yè)務(wù)接口,在寫(xiě)業(yè)務(wù)具體的類(lèi)并implements業(yè)務(wù)接口,再寫(xiě)一個(gè)代理對(duì)象類(lèi)并implements業(yè)務(wù)接口,個(gè)人感覺(jué)與模板模式有點(diǎn)類(lèi)似。
public class Demo {
public static void main(String[] args) {
Action userAction = new UserAction(); //真實(shí)的業(yè)務(wù)對(duì)象
ActionProxy proxy = new ActionProxy(userAction);
proxy.doAction();
}
}
//代理對(duì)象
//用代理記錄用戶(hù)工作的時(shí)間
class ActionProxy implements Action{
private Action target; //被代理的對(duì)象
public ActionProxy(Action target){
this.target = target;
}
@Override
public void doAction() {
long startTime = System.currentTimeMillis();
target.doAction();//執(zhí)行真業(yè)務(wù)
long endTime = System.currentTimeMillis();
System.out.println("共耗時(shí):"+(endTime-startTime));
}
}
//業(yè)務(wù)接口
interface Action{
public void doAction();
}
//業(yè)務(wù)具體的實(shí)現(xiàn)類(lèi)
class UserAction implements Action{
@Override
public void doAction() {
for(int i =0 ;i<1000;i++)
System.out.println("用戶(hù)開(kāi)始工作"); }
}