企业网站可以自己做吗,长春高档网站建设,微网站 制作平台,wordpress是软件不什么是代理模式呢#xff1f;我很忙#xff0c;忙的没空理你#xff0c;那你要找我呢就先找我的代理人吧#xff0c;那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧#xff0c;那就是两个人具备同一个接口#xff0c;代理人虽然不能干活#xff0c;但是被 代… 什么是代理模式呢我很忙忙的没空理你那你要找我呢就先找我的代理人吧那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧那就是两个人具备同一个接口代理人虽然不能干活但是被 代理的人能干活呀。 举例子: 比如西门庆找潘金莲那潘金莲不好意思答复呀咋办找那个王婆做代理 类图如下 (1).静态代理 定义同一种类型的接口定义同一种类型接口的实现定义代理类 1.先定义一种类型的女人
package proxy;/*** * 定义一种类型的女人王婆和潘金莲都属于这个类型的女人** author 1* version 1.0* description: TODO* date 2023/8/14 14:43*/
public interface KindWomen {/*** 抛媚眼*/public void makeEyesWithMan();/*** 开心约会*/public void happyWithMan();}
2.实现接口 package proxy;/*** 潘金莲** author 1* version 1.0* description: TODO* date 2023/8/14 14:45*/
public class PanJinLian implements KindWomen {Overridepublic void makeEyesWithMan() {System.out.println(潘金莲抛媚眼);}Overridepublic void happyWithMan() {System.out.println(潘金莲和男人开心约会);}
}3.定义代理类
package proxy;/*** 代理类* 王婆(帮忙给西门庆代理)** author 1* version 1.0* description: TODO* date 2023/8/14 14:46*/
public class WangPo implements KindWomen {private KindWomen kindWomen;/*** 王婆默认就是潘金莲的代理*/public WangPo() {this.kindWomen new PanJinLian();}/*** 王婆可以代理这个类型的所有人** param kindWomen*/public WangPo(KindWomen kindWomen) {this.kindWomen kindWomen;}Overridepublic void makeEyesWithMan() {//实际做事的是代理类this.kindWomen.makeEyesWithMan();}Overridepublic void happyWithMan() {//实际做事的是代理类this.kindWomen.happyWithMan();}
}4.找到代理类进行调用 package proxy;/*** 西门庆** author 1* version 1.0* description: TODO* date 2023/8/14 14:50*/
public class XiMenQing {public static void main(String[] args) {System.out.println((1)静态代理******************);//西门庆找到王婆,然后王婆就作为代理,帮忙安排了和潘金莲的约会WangPo wangPo new WangPo();//王婆默认的代理就是潘金莲wangPo.makeEyesWithMan();wangPo.happyWithMan();//传参数执行WangPo wangPo2 new WangPo(new PanJinLian());wangPo2.makeEyesWithMan();wangPo2.happyWithMan();System.out.println((2)动态代理******************);KindWomen kindWomen (KindWomen)new ProxyFactory(new PanJinLian()).getProxyInstance();System.out.println(生成的代理对象kindWomen.getClass());kindWomen.makeEyesWithMan();kindWomen.happyWithMan();}
}(2).动态代理
package proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/*** author 1* version 1.0* description: TODO* date 2023/8/14 14:58*/
public class ProxyFactory {//维护一个目标对象 , Objectprivate Object target;//构造器 对target 进行初始化public ProxyFactory(Object target) {this.target target;}//动态生成一个代理对象public Object getProxyInstance() {return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() { //匿名类重写invoke方法Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(动态代理开始);Object returnVal method.invoke(target, args);//反射机制调用目标对象的方法System.out.println(动态代理结束);return returnVal;}});}
}
执行结果如下: