python中代理模式分为几种类型_代理模式
JDK 自帶的動(dòng)態(tài)代理
java.lang.reflect.Proxy:生成動(dòng)態(tài)代理類和對(duì)象;
java.lang.reflect.InvocationHandler(處理器接口):可以通過(guò)invoke方法實(shí)現(xiàn)
對(duì)真實(shí)角色的代理訪問(wèn)。
每次通過(guò) Proxy 生成的代理類對(duì)象都要指定對(duì)應(yīng)的處理器對(duì)象。
代碼:
a) 接口:Subject.java
**
* @author gnehcgnaw
* @date 2018/11/5 19:29
*/
public interface Subject {
public int sellBooks();
public String speak();
}
b)真實(shí)對(duì)象: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("說(shuō)話");
return "張三";
}
}
c)處理器對(duì)象:MyInvocationHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 定義一個(gè)處理器
* @author gnehcgnaw
* @date 2018/11/5 19:26
*/
public class MyInvocationHandler implements InvocationHandler {
/**
* 因?yàn)樾枰幚碚鎸?shí)角色,所以要把真實(shí)角色傳進(jìn)來(lái)
*/
Subject realSubject ;
public MyInvocationHandler(Subject realSubject) {
this.realSubject = realSubject;
}
/**
*
* @param proxy 代理類
* @param method 正在調(diào)用的方法
* @param args 方法的參數(shù)
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("調(diào)用代理類");
if(method.getName().equals("sellBooks")){
int invoke = (int)method.invoke(realSubject, args);
System.out.println("調(diào)用的是賣書的方法");
return invoke ;
}else {
String string = (String) method.invoke(realSubject,args) ;
System.out.println("調(diào)用的是說(shuō)話的方法");
return string ;
}
}
}
d)調(diào)用端:Main.java
import java.lang.reflect.Proxy;
/**
* 調(diào)用類
* @author gnehcgnaw
* @date 2018/11/7 20:26
*/
public class Client {
public static void main(String[] args) {
//真實(shí)對(duì)象
Subject realSubject = new RealSubject();
MyInvocationHandler myInvocationHandler = new MyInvocationHandler(realSubject);
//代理對(duì)象
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)
總結(jié)
以上是生活随笔為你收集整理的python中代理模式分为几种类型_代理模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华莱购物平台(华莱会员网5169888)
- 下一篇: 比亚迪质量到底怎么样 消费者真实评价及品