假如我们有一个商城的项目,这个项目里的商品不是我们自己维护的,后端需要对接京东、淘宝、天猫等供应商。考虑了一下,这种情况可以使用简单工厂模式来实现。
类设计图入下图:
每一个供应商都是一个 具体的产品,抽象产品是 Mall 类,具体的产品是 JDMall、TBMall。
工厂类是 MallFactory, 根据传过来的不同供应商的渠道产生具体的 Mall。
平台入口Controller代码:
public class MallController {
public Goods getGoodsInfo(String sku, String channel) {
Mall mall = MallFactory.getMall(channel);
if (mall == null) {
return null;
}
return mall.getGoodsInfo(sku);
}
public Order submitOrder(List<Goods> goods) {
Mall mall = MallFactory.getMall(channel);
if (mall == null) {
return null;
}
return mall.submitOrder(goods);
}
//其他接口
}
工厂类 MallFactory 代码:
public class MallFactory {
public static Mall getMall(String name) {
if ("JD".equals(name)) {
return new JDMall();
}
if ("TM".equals(name)) {
return new TBMall();
}
return null;
}
}
具体的产品 ,京东API 接口:
public class JDMall implements Mall {
@Override
public Goods getGoodsInfo(String sku) {
//获取对应供应商需要的参数
Map<String, String> extend = new HashMap<>();
String result = HttpClientUtil.getMethod("jd/url/getGoodsInfo", extend);
return this.getGoodsByResult(result);
}
@Override
public Order submitOrder(List<Goods> goods) {
//获取对应供应商需要的参数
Map<String, String> extend = new HashMap<>();
String result = HttpClientUtil.getMethod("jd/url/submitOrder", extend);
return this.getOrderByResult(result);
}
//格式化返回值,适配本地模型
private Goods getGoodsByResult(String result) {
return new Goods();
}
//格式化返回值,适配本地模型
private Order getOrderByResult(String result) {
return new Order();
}
}