栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-模板方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-模板方法

场景介绍

有这么一个场景,不同的电商渲染他们商品信息时,都是管理员登录,查询数据库,然后组装成特定的数据结构返回

现在这几家电商都找到同一家公司帮忙编写这样一个程序。请问如果是你,你会如何设计呢?
很明显,这里使用模板方法模式再合适不过

代码 定义接口,确定行为

我们将上述 登录、查询、组装、渲染四个行为封装到一个接口中

public interface NetMall {

    
    boolean login(String userName,String passWord);

    
    Map queryShopInfo(String shopId);

    
    CommonResult createInfo(Map shopId);


    
    CommonResult getShopDetail(String shopId,String userName,String pwd);



}
抽象类使用模板方法

我们都知道这个需要渲染结果,要经过登录、查询、组装。最终都会返回一个渲染结果,所以我们用抽象类实现getShopDetail,其他逻辑交由不同的电商自行实现

public abstract class AbstractNetMall implements NetMall {

    @Override
    public CommonResult getShopDetail(String shopId,String userName,String pwd){
        if (!login(userName,pwd)){
            return new CommonResult<>(500,"登录失败",new JSonObject());
        }
        Map queryShopDetail = queryShopInfo(shopId);
        CommonResult info = createInfo(queryShopDetail);
        return info;
    }

}
具体电商实现具体逻辑
public class TbMall extends AbstractNetMall {
    
    @Override
    public boolean login(String userName, String passWord) {
        if (!"root".equals(userName) || !"123456".equals(passWord)) {
            return false;
        }
        return true;
    }

    
    @Override
    public Map queryShopInfo(String shopId) {
        Map resultMap = new HashMap<>();
        if ("0000".equals(shopId)) {
            resultMap.put("id", 001);
            resultMap.put("shopName", "椰树汁");
            resultMap.put("price", 15L);

        } else {
            resultMap.put("id", 002);
            resultMap.put("shopName", "其他商品");
            resultMap.put("price", 100L);
        }
        return resultMap;
    }

    
    @Override
    public CommonResult createInfo(Map map) {
        String jsonStr = JSON.toJSonString(map);
        return new CommonResult<>(200, "生成商品信息成功", JSON.parseObject(jsonStr));
    }
}
类图

测试
@Slf4j
public class Main {

    public static void main(String[] args) {
        NetMall mall=new TbMall();
        CommonResult shopDetail = mall.getShopDetail("001", "root", "123456");
        log.info("查询结果"+shopDetail);
    }
}

参考文献

重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762866.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号