一分钟读懂设计模式--代理模式

使用场景

不希望目标对象对外暴露,可以使用代理模式来保护,同时代理类也可以进行扩展。

静态代理

静态代理就是由程序员创建或特定工具生成源代码,在对其编译之前

优点:符合开闭原则情况下,对目标对象进行功能扩展。

缺点:每一个服务都得创建代理类,工作量大,不易管理,接口一旦发生改变,代理类也要修改。

public interface BuyCar {
    void buyCar();
}
public class BuyCarImpl implements BuyCar {
    @Override
    public void buyCar() {
        System.out.println("买车了");
    }
}
//代理类
public class BuyCarProxy {
    private BuyCar buyCar;

    public BuyCarProxy(BuyCar buyCar) {
        this.buyCar = buyCar;
    }

    public void buyCar() {
        buyCar.buyCar();
    }
}
//使用
BuyCarProxy buyCarProxy = new BuyCarProxy(new BuyCarImpl());
buyCarProxy.buyCar();

动态代理

动态代理就是在程序运行过程中通过反射机制动态创建

优点:只需要编写一个动态处理器就可以了,减少开发量,降低耦合度

缺点:反射效率低,

public class DynamicProxyHandler implements InvocationHandler {
    private Object object;

    public DynamicProxyHandler(Object o) {
        this.object = o;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = method.invoke(object,args);
        return result;
    }
}

//使用
BuyCar buyHouse = new BuyCarImpl();
BuyCar proxyBuyHouse = (BuyCar) Proxy.newProxyInstance(BuyCar.class.getClassLoader(), new
                Class[]{BuyCar.class}, new DynamicProxyHandler(buyHouse));
proxyBuyHouse.buyCar();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值