为什么要接口代理?
在不改变原来代码,对已有方法增强
1 创建一个卖电脑接口
| public interface SaleComputer { |
| |
| public String sale(double money); |
| |
| public void show(); |
| } |
2 创建一个类,实现接口
| public class Lenovo implements SaleComputer { |
| @Override |
| public String sale(double money) { |
| |
| System.out.println("花了"+money+"元买了一台联想电脑..."); |
| return "联想电脑"; |
| } |
| |
| @Override |
| public void show() { |
| System.out.println("展示电脑...."); |
| } |
| } |
3 创建接口的代理对象
| public class ProxyTest { |
| |
| public static void main(String[] args) { |
| |
| Lenovo lenovo = new Lenovo(); |
| |
| |
| |
| |
| |
| |
| |
| |
| SaleComputer proxy_lenovo = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() { |
| |
| |
| |
| |
| |
| |
| |
| |
| @Override |
| public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { |
| |
| |
| if(method.getName().equals("sale")){ |
| |
| double money = (double) args[0]; |
| money = money * 0.85; |
| System.out.println("专车接你...."); |
| |
| String obj = (String) method.invoke(lenovo, money); |
| System.out.println("免费送货..."); |
| |
| return obj+"_鼠标垫"; |
| }else{ |
| Object obj = method.invoke(lenovo, args); |
| return obj; |
| } |
| |
| |
| |
| } |
| }); |
| |
| |
| |
| String computer = proxy_lenovo.sale(8000); |
| System.out.println(computer); |
| |
| proxy_lenovo.show(); |
| } |
| } |
我对任何唾手而得,快速,出自本能,即兴,含混的事物没有信心。我相信缓慢,平和,细水长流的力量,踏实,冷静。我不相信缺乏自律精神和不自我建设,不努力,可以得到个人或集体的解放。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!