【设计模式】代理模式 ( 静态代理 )

举报
韩曙亮 发表于 2022/01/12 23:37:31 2022/01/12
【摘要】 文章目录 一、静态代理代码示例1、订单类2、Service 接口3、Service 实现类4、Service 静态代理类5、Dao 接口6、Dao 实现类7、测试类 一、...





一、静态代理代码示例



业务场景 : 保存订单信息 , 在 Service 层处理订单保存 , 在 Dao 层将订单存储到数据库 ; 使用静态代理类加强 Service 层的功能 ;


1、订单类


package proxy;

/**
 * 订单类
 *      存储订单时 , 通过 Service 层通接收 Order 对象进行处理
 */
public class Order {
    /**
     * 订单信息
     */
    private Object orderInfo;

    /**
     * 用户 ID
     */
    private Integer userId;

    public Order(Object orderInfo, Integer userId) {
        this.orderInfo = orderInfo;
        this.userId = userId;
    }

    public Object getOrderInfo() {
        return orderInfo;
    }

    public void setOrderInfo(Object orderInfo) {
        this.orderInfo = orderInfo;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

2、Service 接口


package proxy;

/**
 * 服务接口
 */
public interface IOrderService {
    /**
     * 保存订单
     * @param order 数据库生效行数
     * @return
     */
    int saveOrder(Order order);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、Service 实现类


package proxy;

public class OrderServiceImpl implements IOrderService {
    private IOrderDao iOrderDao;

    public OrderServiceImpl(IOrderDao iOrderDao) {
        this.iOrderDao = iOrderDao;
    }

    @Override
    public int saveOrder(Order order) {
        System.out.println("Service 层插入 Order 订单信息成功");
        return this.iOrderDao.insert(order);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4、Service 静态代理类


package proxy;

/**
 * 订单服务静态代理类
 */
public class OrderServiceStaticProxy {
    private IOrderService iOrderService;

    public OrderServiceStaticProxy(IOrderService iOrderService) {
        this.iOrderService = iOrderService;
    }

    public int saveOrder(Order order){
        beforeMethod();
        int result = iOrderService.saveOrder(order);
        afterMethod();
        return result;
    }

    /**
     * 在被代理对象方法之前执行的内容
     */
    private void beforeMethod() {
        System.out.println("静态代理 OrderServiceStaticProxy 执行 saveOrder 之前");
    }

    /**
     * 在被代理对象方法之后执行的内容
     */
    private void afterMethod() {
        System.out.println("静态代理 OrderServiceStaticProxy 执行 saveOrder 之后");
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

5、Dao 接口


package proxy;

/**
 * 数据库接口
 */
public interface IOrderDao {
    /**
     * 向数据库中插入订单信息
     * @param order
     * @return
     */
    int insert(Order order);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6、Dao 实现类


package proxy;

public class OrderDaoImpl implements IOrderDao {
    @Override
    public int insert(Order order) {
        System.out.println("Dao 层插入 Order 订单信息成功");
        return 1;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

7、测试类


package proxy;

public class Main {
    public static void main(String[] args) {
        Order order = new Order("书籍订单", 1);

        IOrderDao dao = new OrderDaoImpl();
        IOrderService service = new OrderServiceImpl(dao);

        // 不使用代理的情况
        service.saveOrder(order);

        System.out.println();

        // 使用代理的情况
        OrderServiceStaticProxy proxy = new OrderServiceStaticProxy(service);
        proxy.saveOrder(order);

    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

执行结果 :

Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功

静态代理 OrderServiceStaticProxy 执行 saveOrder 之前
Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功
静态代理 OrderServiceStaticProxy 执行 saveOrder 之后

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/119809723

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。