设计模式-工厂方法模式

1. 需求

假如我们有一个商城的项目,这个项目里的商品不是我们自己维护的,后端需要对接京东、淘宝、天猫等供应商。考虑了一下,这种情况可以使用简单工厂模式来实现。

2. 设计

类设计图入下图:

简单工厂模式结构图

每一个供应商都是一个 具体的产品,抽象产品是 Mall 类,具体的产品是 JDMall、TBMall。

工厂类是 MallFactory, 根据传过来的不同供应商的渠道产生具体的 Mall。

3. 代码结构

平台入口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();
    }
}

4. 完整代码

完整代码在这里

转载请注明出处
本文链接:https://zdran.com/20190222.html