网站首页 > java教程 正文
请点击【关注】获取更多互联网和技术干货,头条号IT徐胖子原创本文请勿转载,感谢支持
1 适配器模式概述
现在有这样一个场景:你们系统调用了订单中心的服务OrderService,但是订单中心改造新增了OrderNewService,订单中心要求你们都改用OrderNewService接口,现在由你主导接口切换工作。
切换接口尤其是核心接口风险还是比较大的,我们希望改动尽量少,减少对原有业务代码侵入性。这种情况我建议使用适配器模式。我们来分析这个实例。
2 原始调用方式
2.1 老订单服务
/**
* 外部订单服务
*
* @author 今日头条号「IT徐胖子」
*
*/
public interface OrderService {
/**
* 创建订单
*
* @param goodsId 商品ID
* @param price 商品价格
* @return 订单编号
*/
public String createOrder(String goodsId, Long price);
}
/**
* 外部订单服务实现
*
* @author 今日头条号「IT徐胖子」
*
*/
public class OrderServiceImpl implements OrderService {
@Override
public String createOrder(String goodsId, Long price) {
String orderId = "orderId_111";
System.out.println("创建订单成功[goodsId=" + goodsId + ",price=" + price + "]");
return orderId;
}
}
2.2 调用老订单服务
/**
* 模拟本系统调用
*
* @author 今日头条号「IT徐胖子」
*
*/
public class TestDemo {
public static void main(String[] args) {
OrderService service = new OrderServiceImpl();
service.createOrder("goodsId_123", 100 L);
}
}
3 使用适配器模式
3.1 新订单模型
/**
* 新订单模型
*
* @author 今日头条号「IT徐胖子」
*
*/
public class OrderNewModel {
private String goodsId;
private Long price;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
}
3.2 新订单服务
/**
* 外部订单新服务
*
* @author 今日头条号「IT徐胖子」
*
*/
public interface OrderNewService {
/**
* 创建订单
*
* @param orderModel 订单模型
* @return 订单编号
*/
public String createOrder(OrderNewModel orderModel);
}
/**
* 外部订单新服务实现
*
* @author 今日头条号「IT徐胖子」
*
*/
public class OrderNewServiceImpl implements OrderNewService {
@Override
public String createOrder(OrderNewModel orderModel) {
String orderId = "orderId_222";
System.out.println("新接口创建订单成功[goodsId=" + orderModel.getGoodsId() + ",price=" + orderModel.getPrice() + "]");
return orderId;
}
}
3.3 订单服务适配器
/**
* 订单服务适配器
*
* @author 今日头条号「IT徐胖子」
*
*/
public class OrderServiceAdaptor implements OrderService {
private OrderNewService orderNewService;
public OrderServiceAdaptor(OrderNewService orderNewService) {
this.orderNewService = orderNewService;
}
@Override
public String createOrder(String goodsId, Long price) {
OrderNewModel orderModel = new OrderNewModel();
orderModel.setGoodsId(goodsId);
orderModel.setPrice(price);
return orderNewService.createOrder(orderModel);
}
}
3.4 替换为新服务
/**
* 模拟本系统调用
*
* @author 今日头条号「IT徐胖子」
*
*/
public class TestDemo {
public static void main(String[] args) {
OrderService service = new OrderServiceAdaptor(new OrderNewServiceImpl());
serviceNew.createOrder("goodsId_222", 222 L);
}
}
4 思考总结
我们看到将旧服务替换为新服务,在业务代码层面(TestDemo)并没有做大量修改,而是利用适配器模式,将新服务组合进适配器,对业务侵入性很低。
适配器模式顾名思义就是用来做适配的,适配器就像一个中转站,可以把原来不符合要求的数据、服务、接口转换为符合要求,从而可以一起工作。
工作中常用的场景是在新老服务切换时,适配器可以减少对业务代码的侵入性,符合对扩展开放,对修改关闭设计原则。
请点击【关注】获取更多互联网和技术干货,头条号IT徐胖子原创本文请勿转载,感谢支持
- 上一篇: 设计模式(五):适配器模式
- 下一篇: 设计模式之适配器模式
猜你喜欢
- 2024-11-26 面试官:请说下适配器模式、代理模式和装饰者模式的不同
- 2024-11-26 适配器模式:类适配器 (Class Adapter)
- 2024-11-26 简说设计模式之适配器模式
- 2024-11-26 设计模式系列-结构型-适配器模式
- 2024-11-26 Java 适配器模式在保险出单业务中的应用
- 2024-11-26 设计模式——适配器模式
- 2024-11-26 设计模式-适配器模式,安卓中应用场景介绍!!
- 2024-11-26 万能转接头之适配器模式
- 2024-11-26 适配器模式的设计,你get到了吗?
- 2024-11-26 无处不在的适配器模式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)