文档章节

组合模式在商品分类列表中的应用

算法之名
 算法之名
发布于 05/21 00:32
字数 461
阅读 17
收藏 0

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。

先定义一个树形结构的商品接口

public interface TreeProduct {
    List<TreeProduct> allProducts();
    boolean addProduct(TreeProduct product);
    boolean addProducts(List<TreeProduct> products);
    boolean removeProduct(TreeProduct product);
}

我们来定义一个商品分类的实现类

@NoArgsConstructor
@ToString
public class TypeProduct implements TreeProduct {
    @Getter
    @Setter
    private Integer id;
    @Getter
    @Setter
    private String name;
    @Getter
    private List<TreeProduct> treeProducts = new CopyOnWriteArrayList<>();
    public TypeProduct(Integer id,String name) {
        this.id = id;
        this.name = name;
    }
    @Override
    public List<TreeProduct> allProducts() {
        return this.treeProducts;
    }

    @Override
    public boolean addProduct(TreeProduct product) {
        return treeProducts.add(product);
    }

    @Override
    public boolean removeProduct(TreeProduct product) {
        return treeProducts.remove(product);
    }

    @Override
    public boolean addProducts(List<TreeProduct> products) {
        return treeProducts.addAll(products);
    }
}

然后定义一个商品类

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Product implements TreeProduct {
    private Integer id;
    private String name;
    private String model;
    private BigDecimal price;

    @Override
    public List<TreeProduct> allProducts() {
        return Arrays.asList(this);
    }

    @Override
    public boolean addProduct(TreeProduct product) {
        throw new RuntimeException("不支持此方法");
    }

    @Override
    public boolean removeProduct(TreeProduct product) {
        throw new RuntimeException("不支持此方法");
    }

    @Override
    public boolean addProducts(List<TreeProduct> products) {
        throw new RuntimeException("不支持此方法");
    }
}

最后是main方法,当然你可以在Web的系统去改造这个模式

public class ProductMain {
    public static void main(String[] args) {
        TreeProduct root = new TypeProduct(100,"根目录");
        TreeProduct type1 = new TypeProduct(200,"可乐");
        TreeProduct type2 = new TypeProduct(300,"咖啡");
        List<TreeProduct> types1 = new ArrayList<>();
        types1.add(type1);
        types1.add(type2);
        TreeProduct product1 = new Product(1,"可口可乐","500ml",new BigDecimal(3));
        TreeProduct product2 = new Product(2,"雀巢咖啡","600ml",new BigDecimal(6));
        root.addProducts(types1);
        type1.addProduct(product1);
        type2.addProduct(product2);
        System.out.println(JSON.toJSONString(root));
    }
}

运行结果:

{"id":100,"name":"根目录","takeCareProducts":[{"id":200,"name":"可乐","takeCareProducts":[{"id":1,"model":"500ml","name":"可口可乐","price":3}]},{"id":300,"name":"咖啡","takeCareProducts":[{"id":2,"model":"600ml","name":"雀巢咖啡","price":6}]}]}

 

© 著作权归作者所有

算法之名
粉丝 38
博文 154
码字总数 216964
作品 0
广州
私信 提问
2.0模版标签手册beta版

模板标签手册 海盗模板引擎 海盗云商系统(以下简称海盗)的模板引擎是基于原始PHP的「解释型」模板文件引擎,故无论在模板文件里如何编写标签代码,引擎均会转换为原始PHP语句进行解析。 也就...

海绵的歇斯底里
2016/03/15
1
0
[MobX State Tree数据组件化开发][0]:开篇

组件化的时代 React、Vue、Angular等库(框架)出现后,前端进入了UI组件化开发的时代。通过合理地划分应用的功能,封装成一个个从底层到高层的组件,最后构造为一颗组件树,完成我们的应用:...

awaw00
01/30
0
0
电商促销活动功能参考

1 团购 1.1 平台-团购管理 1.1.1 团购活动 管理员可以审核新的团购活动申请、取消进行中的团购活动或者删除团购活动。 搜索条件:团购名称 + 店铺名称 + 状态 数据表格: 团购名称 开始时间 ...

chaogetu
2015/05/07
15
0
1121需求评审

会议议题:商品模块需求评审 预评审问题: 大力: 商品ID:必填项,由商品最小分类的拼音码+5位数字码构成(数字码按所有商品进行自增,自然数) Q:后续重构,数据库整合在一起,商品数量会...

pigxiao
2016/11/21
0
8
商城系统 DBShop V1.1 RC 20170714 发布

DBShop 电子商务网店系统,采用PHP官方框架 ZendFramework 2 开发而成。在网上建立自己的店铺、自己的销售网站的不二之选。强大的后台管理及简单的操作流程,让您一见倾心。严谨的功能结合、...

静静的风
2017/07/14
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
6
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0
java并发图谱

1527
昨天
2
0
Mybatis之拦截器Interceptor

使用mybatis时用PageHelper进行分页,用到了PageInterceptor,借此了解下mybatis的interceptor。Mybatis的版本是3.4.6,MybatisHelper的版本是5.1.3。 1、PageInterceptor 先上一段代码,如下...

克虏伯
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部