前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式】代理模式 ( 静态代理 )

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

作者头像
韩曙亮
发布2023-03-29 15:34:47
1470
发布2023-03-29 15:34:47
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、静态代理代码示例


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

1、订单类

代码语言:javascript
复制
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;
    }
}

2、Service 接口

代码语言:javascript
复制
package proxy;

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

3、Service 实现类

代码语言:javascript
复制
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);
    }
}

4、Service 静态代理类

代码语言:javascript
复制
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 之后");
    }
}

5、Dao 接口

代码语言:javascript
复制
package proxy;

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

6、Dao 实现类

代码语言:javascript
复制
package proxy;

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

7、测试类

代码语言:javascript
复制
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);

    }
}

执行结果 :

代码语言:javascript
复制
Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功

静态代理 OrderServiceStaticProxy 执行 saveOrder 之前
Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功
静态代理 OrderServiceStaticProxy 执行 saveOrder 之后
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、静态代理代码示例
    • 1、订单类
      • 2、Service 接口
        • 3、Service 实现类
          • 4、Service 静态代理类
            • 5、Dao 接口
              • 6、Dao 实现类
                • 7、测试类
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档