python中代理模式分为几种类型_代理模式
JDK 自帶的動態代理
java.lang.reflect.Proxy:生成動態代理類和對象;
java.lang.reflect.InvocationHandler(處理器接口):可以通過invoke方法實現
對真實角色的代理訪問。
每次通過 Proxy 生成的代理類對象都要指定對應的處理器對象。
代碼:
a) 接口:Subject.java
**
* @author gnehcgnaw
* @date 2018/11/5 19:29
*/
public interface Subject {
public int sellBooks();
public String speak();
}
b)真實對象:RealSubject.java
/**
* @author gnehcgnaw
* @date 2018/11/5 18:54
*/
public class RealSubject implements Subject{
@Override
public int sellBooks() {
System.out.println("賣書");
return 1 ;
}
@Override
public String speak() {
System.out.println("說話");
return "張三";
}
}
c)處理器對象:MyInvocationHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 定義一個處理器
* @author gnehcgnaw
* @date 2018/11/5 19:26
*/
public class MyInvocationHandler implements InvocationHandler {
/**
* 因為需要處理真實角色,所以要把真實角色傳進來
*/
Subject realSubject ;
public MyInvocationHandler(Subject realSubject) {
this.realSubject = realSubject;
}
/**
*
* @param proxy 代理類
* @param method 正在調用的方法
* @param args 方法的參數
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("調用代理類");
if(method.getName().equals("sellBooks")){
int invoke = (int)method.invoke(realSubject, args);
System.out.println("調用的是賣書的方法");
return invoke ;
}else {
String string = (String) method.invoke(realSubject,args) ;
System.out.println("調用的是說話的方法");
return string ;
}
}
}
d)調用端:Main.java
import java.lang.reflect.Proxy;
/**
* 調用類
* @author gnehcgnaw
* @date 2018/11/7 20:26
*/
public class Client {
public static void main(String[] args) {
//真實對象
Subject realSubject = new RealSubject();
MyInvocationHandler myInvocationHandler = new MyInvocationHandler(realSubject);
//代理對象
Subject proxyClass = (Subject) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Subject.class}, myInvocationHandler);
proxyClass.sellBooks();
proxyClass.speak();
}
}
gnehcgnaw
gnehcgnaw
949***604@qq.com2年前 (2018-11-13)
總結
以上是生活随笔為你收集整理的python中代理模式分为几种类型_代理模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华莱购物平台(华莱会员网5169888)
- 下一篇: python控制结构(二)_Python