【java_设计模式】代理模式 静态代理

学习路径:https://coding.imooc.com/learn/list/270.html

  • 应用场景
    增强被代理对象的实现,具体增强的途径
    1. 增加前置方法:如过滤期望外的参数、选择数据库连接池、获取持久化的对象等。
    2. 增加后置方法:将被代理类的返回值封装、对返回值进行筛选等
  • 实现
public class OrderServiceStaticProxy {
    // 代理类持有被代理对象的引用,该对象是业务逻辑实现类
    private IOrderService iOrderService;

    public int saveOrder(Order order){
        beforeMethod(order);
        // 模拟spring注入一个系统服务
        iOrderService = new OrderServiceImpl();
        // 系统服务处理具体业务
        int result = iOrderService.saveOrder(order);
        afterMethod();
        return result;
    }

    /**
     * 根据不同的id选取不同的数据库连接
     * @param order
     */
    private void beforeMethod(Order order) {
        System.out.println("静态代理before code");
        // 模拟不同db的路由
        int userId = order.getUserId();
        int dbRouter = userId % 2;
        System.out.println("静态代理分配到【db" + dbRouter +"】处理数据");
        // todo 设置dataSource;
        DataSourceContextHolder.setDBType("db" + String.valueOf(dbRouter));
    }

    private void afterMethod() {
        System.out.println("静态代理 after code");
    }
}


```java
	/**
     * 根据不同的id选取不同的数据库连接
     * @param order
     */
    private void beforeMethod(Order order) {
        System.out.println("静态代理before code");
        // 模拟不同db的路由
        int userId = order.getUserId();
        int dbRouter = userId % 2;
        System.out.println("静态代理分配到【db" + dbRouter +"】处理数据");
        // todo 设置dataSource;
        DataSourceContextHolder.setDBType("db" + String.valueOf(dbRouter));
    }
	public static void main(String[] args) {
        // 参数
        Order order = new Order();
        order.setUserId(1);
        // 创建代理, 不直接使用被代理对象
        OrderServiceStaticProxy orderServiceStaticProxy = new OrderServiceStaticProxy();
        // 使用代理的保存订单号操作
        orderServiceStaticProxy.saveOrder(order);
    }
  • 总结
    代理模式的静态代理实现,实质就是对被代理对象的入参和出参进行了一次封装,同时不破坏被代理对象的代码。应用层只用改一行代码即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值