欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

輕松掌握J(rèn)ava代理模式

 更新時間:2016年09月30日 16:18:19   作者:斷了聯(lián)系  
這篇文章主要幫助大家輕松掌握J(rèn)ava代理模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

定義:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。

特點(diǎn):

1、真實的角色就是實現(xiàn)實際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責(zé)的事務(wù),通過后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡潔清晰。

2、代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用,這樣起到了中介的作用和保護(hù)了目標(biāo)對象的作用。

3、擴(kuò)展性高

企業(yè)級開發(fā)和常用框架中的應(yīng)用:最著名的就是spring的aop,還有spring的bean的創(chuàng)建其實也用到了代理

代理模式分為了動態(tài)代理和靜態(tài)代理,動態(tài)代理是開發(fā)中應(yīng)用的特別多。

靜態(tài)代理:

/**
 * 以買房舉例
 */
interface Actions {

 /**
 * 選房
 */
 public void selectHouse();
 
 /**
 * 看房
 */
 public void seeHouse();
 
 /**
 * 入住
 */
 public void ruzhu();
 
}

class RealRole implements Actions{

 public void selectHouse() {
 System.out.println("用戶自己選房");
 }

 public void seeHouse() {
 System.out.println("用戶自己看房");
 }

 public void ruzhu() {
 System.out.println("用戶自己入住");
 }

}

class ProxyRole implements Actions{

 private RealRole realRole;
 
 public ProxyRole(RealRole realRole) {
 this.realRole = realRole;
 }
 
 public void selectHouse() {
 System.out.println("中介選房");
 }

 public void seeHouse() {
 System.out.println("中介看房");
 }

 @Override
 public void ruzhu() {
 realRole.ruzhu();
 }

}

public class Demo {

 public static void main(String[] args) {
 RealRole realRole = new RealRole();
 ProxyRole proxyRole = new ProxyRole(realRole);
 proxyRole.selectHouse();
 proxyRole.seeHouse();
 proxyRole.ruzhu();
 }
}

動態(tài)代理:

/**
 * 以買房舉例
 */
interface Actions {

 /**
 * 選房
 */
 public void selectHouse();
 
 /**
 * 看房
 */
 public void seeHouse();
 
 /**
 * 入住
 */
 public void ruzhu();
 
}

class RealRole implements Actions{

 public void selectHouse() {
 System.out.println("用戶自己選房");
 }

 public void seeHouse() {
 System.out.println("用戶自己看房");
 }

 public void ruzhu() {
 System.out.println("用戶自己入住");
 }

}

class Handler implements InvocationHandler{

 private RealRole realRole ;
 
 public Handler(RealRole realRole) {
 this.realRole = realRole;
 }
 
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 System.out.println(realRole);
 System.out.println("中介選房,看房");
 method.invoke(realRole, args);
 return null;
 }

}

public class Demo {

 public static void main(String[] args) {
 RealRole realRole = new RealRole();
 
 Handler handler = new Handler(realRole);
 
 Actions proxy = (Actions) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Actions.class}, handler);
 proxy.ruzhu();
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論