程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java靜態署理示例分享

java靜態署理示例分享

編輯:關於JAVA

java靜態署理示例分享。本站提示廣大學習愛好者:(java靜態署理示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是java靜態署理示例分享正文


起首剖析靜態署理形式中的3個腳色:
1.籠統腳色:static proxy中它可認為籠統類,然則dynamic proxy中它只能是接口
2.真實腳色:就是完成了籠統腳色中的辦法而已
3.署理腳色:最惡心的就是靜態署理外面的這個署理腳色了。它要持有真實腳色的援用。

它觸及到一個接口和一個類,InvocationHandler接口和Proxy類。依據JDK文檔說,InvocationHandler接口是要被一個類完成的,這個類的實例是一個署理對象對應的handler對象。現代理對象的一個辦法被挪用,則會把該辦法編碼並分派給它對應的handler對象的invoke辦法中去挪用!


//籠統腳色:
public interface AbstractRole
{
public void show();
}

//真實腳色:

public class RealRole implements AbstractRole

{

@Override

public void show(){ System.out.println("show me your house"); }

}

//署理腳色:

//我認為這只是一個偽署理而已,偽署理是我本身想出來的= =!,由於它現實是署理對應的handler

public class Handler implements InvocationHandler

{

private Object realRole; // 署理腳色中須要有真實腳色的援用,界說為Object類型則通用

public Handler(Object realRole)

{ this.realRole = realRole; }

@Override

public Object invoke(Object proxy, Method method, Object[] args)

{

System.out.println("Give me your money");  // 這是署理腳色本身添加的額定功效而已

method.invoke(this.realRole, args); //經由過程反射挪用真實腳色的辦法

System.out.println("Ok...house is yours");//這是署理腳色本身添加的額定功效而已
}

public Object factory()//經由過程工場辦法生成真實的署理腳色

{
return Proxy.newProxyInstance(this.getClass().getClassLoader(), this.realObject.getClass().getInterfaces(), this); //Proxy中的newProxyInstance辦法有兩個很主要的特色!第一是靜態創立一個署理類,若輸入似乎是名叫$Proxy0的類;第二是經由過程靜態創立的這個類生成一個實例。
}
}

//客戶端:
public class Test

{

   public static void main(String[] args)

  {
     RealRole realRole = new RealRole();//想要署理哪個真實腳色就new出這個真實腳色

     Handler handler = new Handler(realRole);//這裡發生了署理類對應的handler了,我也想叫他偽署理對象

     AbstractRole proxy = (AbstractRole)handler.factory();//經由過程工場辦法發生署理對象
  }

}

以上或許會想這裡署理腳色怎樣能強轉為籠統腳色呢?緣由在於newProxyInstance辦法,這個辦法太interesting了~就如下面說的,它會主動發生一個類,然後經由過程類發生署理對象。其實這個類就完成了籠統腳色類了,為何?由於第二個參數曾經指清楚明了它完成哪些接口了。所以可以強轉了,強轉以後便可以挪用籠統腳色中的辦法了

proxy.show();//好!留意這句了,我在最開端有紅體字標出來,“會把該辦法編碼並分派給它對應的handler對象的invoke辦法中去挪用!” 就由於這句話,所以proxy.show()就是把show辦法傳到了handler對象中的invoke辦法中去了,固然也隨著show辦法的參數了,不外這裡show辦法沒有參數。所以proxy.show()這句話現實就是挪用了handler對象中的invoke辦法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved