【设计模式】代理模式 ( 静态代理 )
【摘要】
文章目录
一、静态代理代码示例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)