java代理模式,静态/动态代理,简单案例实现--柚子真好吃
一、代理模式简单介绍
- 代理模式其实就是一个中间人/中间商执行业务的过程
- 代理模式是一种结构型模式
- 代理模式为其他对象提供一种代理以控制对这个对象的访问
二、业务介绍
人物介绍:
- 孙小币:公司职员,每日操劳,想寻求刺激。
- 条哥:专业按摩师。
- 宫燕遵:中间商。
- 宫燕军:宫燕遵的哥哥,同样是中间商。
业务流程:
一日,孙小币由于工作特别劳累,故想找专业人员上门服务,但其并不认识条哥。此时孙小币想起了宫燕二兄弟,让其作为中间人,帮忙联系条哥。
三、静态代理
-
定义"条宝科技"服务,TBServer.java接口
public interface TBServer { //上门服务 public void doorCalls(); //收费 public void getMoney(); } -
构建条哥业务,TiaoGe.java
public class TiaoGe implements TBServer { @Override public void doorCalls() { System.out.println("条哥上门服务"); } @Override public void getMoney() { System.out.println("条哥收取服务费"); } } -
中间人宫燕遵 GongYanZun.java
public class GongYanZun implements TBServer { private String name = "宫燕遵"; private TBServer tbServer; public GongYanZun(TBServer tbServer){ this.tbServer = tbServer; } @Override public void doorCalls() { System.out.println("介绍人:"+this.name+"呼叫条哥上门服务"); tbServer.doorCalls(); } @Override public void getMoney() { System.out.println("介绍人:"+this.name+"替条哥收取费用"); System.out.println(this.name+"收取了手续费"); tbServer.getMoney(); } } -
测试类SunXiaoBi.java
public class SunXiaoBin { public static void main(String[] args) { TiaoGe tiaoGe = new TiaoGe(); TBServer tbServer = new GongYanZun(tiaoGe); tbServer.doorCalls(); tbServer.getMoney(); } } -
运行结果

四、动态代理
- 中间人 宫燕军 GongYanJun.java
public class GongYanJun implements InvocationHandler { private String name = "宫燕军"; private Object target; public GongYanJun(Object target){ this.target = target; } public TBServer getProxy() { Object obj = Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this); return (TBServer)obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { before(method.getName()); Object result = method.invoke(target,args); return result; } private void before(String methodName) { if("doorCalls".equals(methodName)){ System.out.println("介绍人:"+this.name+"呼叫条哥上门服务"); } if("getMoney".equals(methodName)){ System.out.println(this.name+"收取了手续费"); } } } - 测试类SunXiaoBi.java
public class SunXiaoBin { public static void main(String[] args) { TiaoGe tiaoGe = new TiaoGe(); TBServer tbServer = new GongYanZun(tiaoGe); tbServer.doorCalls(); tbServer.getMoney(); System.out.println("==================================="); TiaoGe tiaoGe2 = new TiaoGe(); TBServer tbServer2 = new GongYanJun(tiaoGe2).getProxy(); tbServer2.doorCalls(); tbServer2.getMoney(); } } - 运行结果

本文通过生动的场景描述,深入浅出地介绍了Java代理模式的概念及其应用。从静态代理到动态代理,通过具体案例展示了如何使用代理模式来控制对对象的访问。
175

被折叠的 条评论
为什么被折叠?



