java设计模式--代理模式
发布日期:2021-05-15 01:31:22 浏览次数:11 分类:精选文章

本文共 1651 字,大约阅读时间需要 5 分钟。

基本概念定义:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用;

通俗的讲代理模式就是生活中常见的中介;

想象一下我们生活中的购买火车票的情节,可以从官网上购买,可以到售票的窗口购买,这是从官方购买,在编程中,这个过程就是指从提供这个功能的类直接获取这个功能;当然我们也可以从售票厅旁边的小超市,或者其他地方代售火车票的地方购买火车票,那么这些代销处就是代理了火车站的售票功能,那么他们就是代理;

静态代理创建服务类接口

public interface BuyHouse { void buyHosue();}

实现服务接口

public class BuyHouseImpl implements BuyHouse { @Override public void buyHosue() { System.out.println("我要买房"); }}

创建代理类

public class BuyHouseProxy implements BuyHouse { private BuyHouse buyHouse; public BuyHouseProxy(final BuyHouse buyHouse) { this.buyHouse = buyHouse; } @Override public void buyHosue() { System.out.println("买房前准备"); buyHouse.buyHosue(); System.out.println("买房后装修"); }}

编写测试类

public class ProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); buyHouse.buyHosue(); BuyHouseProxy buyHouseProxy = new BuyHouseProxy(buyHouse); buyHouseProxy.buyHosue(); }}

动态代理动态代理是在程序运行时通过反射机制动态创建的;

编写动态处理器

public class DynamicProxyHandler implements InvocationHandler { private Object object; public DynamicProxyHandler(final Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("买房前准备"); Object result = method.invoke(object, args); System.out.println("买房后装修"); return result; }}

编写测试类

public class DynamicProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(), new Class[]{BuyHouse.class}, new DynamicProxyHandler(buyHouse)); proxyBuyHouse.buyHosue(); }}

更多关于java动态代理的可以参考:

Java动态代理InvocationHandler和Proxy学习笔记

上一篇:java常用类--String
下一篇:java设计模式--装饰模式

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月07日 03时06分21秒