ダイナミックエージェント[jdkで実装]
一.javaのjdkダイナミックエージェント
JDKで実装された動的エージェントは、エージェントされたオブジェクトにインタフェースを実装する必要があります.実は、現主はjava.lang.reflect.Proxyクラスとjava.lang.reflect.InvocationHandlerインタフェースを介しています.
二.本章では、javaのjdk動的エージェントの実装を「チケット売り場エージェント駅チケット」の例で実証する.完全なコードは以下の通りである.
1.[エージェントターゲットが実装するインタフェース]
2.乗車券[被代理ターゲット]
3.チケット販売サービス
4.動的エージェント
5.テスト
6.運転結果:
チケット宅配サービス 切符を売る チケット割引サービス
JDKで実装された動的エージェントは、エージェントされたオブジェクトにインタフェースを実装する必要があります.実は、現主はjava.lang.reflect.Proxyクラスとjava.lang.reflect.InvocationHandlerインタフェースを介しています.
二.本章では、javaのjdk動的エージェントの実装を「チケット売り場エージェント駅チケット」の例で実証する.完全なコードは以下の通りである.
1.[エージェントターゲットが実装するインタフェース]
package structuralPattern.proxy.jdk;
/**
* @ClassName: ITarget
* @Description:
* @author Liyongbin
* @date 2011-2-8 12:52:09
* @version V1.0
*/
public interface ITicket {
public abstract void saleTicket();
}
2.乗車券[被代理ターゲット]
package structuralPattern.proxy.jdk;
/**
* @ClassName: Train
* @Description:
* @author Liyongbin
* @date 2011-2-8 12:54:36
* @version V1.0
*/
public class Train implements ITicket{
@Override
public void saleTicket() {
System.out.println(" ");
}
}
3.チケット販売サービス
package structuralPattern.proxy.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* @ClassName: BuyTicketService
* @Description:
* @author Liyongbin
* @date 2011-2-8 01:02:36
* @version V1.0
*/
public class BuyTicketService implements InvocationHandler {
//
private Object target;
public BuyTicketService(Object target) {
this.target=target;
}
//
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
deliverTicket();
method.invoke(target, args);
discountTicket();
return null;
}
//" " 1
public void deliverTicket() {
System.out.println(" ");
}
//" " 2
public void discountTicket() {
System.out.println(" ");
}
}
4.動的エージェント
package structuralPattern.proxy.jdk;
import java.lang.reflect.Proxy;
/**
* @ClassName: DynamicProxy_JDK
* @Description:
* @author Liyongbin
* @date 2011-2-8 12:58:45
* @version V1.0
*/
public class DynamicProxy_JDK {
public Object getProxy(Object target) {
return Proxy
.newProxyInstance(target.getClass().getClassLoader(), target
.getClass().getInterfaces(), new BuyTicketService(target));
}
}
5.テスト
package structuralPattern.proxy.jdk;
public class DynamicProxyTest {
public static void main(String[] args) {
//
DynamicProxy_JDK dp = new DynamicProxy_JDK();
//
ITicket ticket = (ITicket) dp.getProxy(new Train());
//
ticket.saleTicket();
}
}
6.運転結果:
チケット宅配サービス 切符を売る チケット割引サービス