Java问题,主要是购物车那一块不知道如何写

项目:根据设计模式相关的知识点定义一个商品类,包括商品类型、价格、商品id,商品名称三个属性,有如下三个商品,【oppo、1999元、id:1】、【卫龙、0.5元、id:3】、【保暖裤、19元、id:4】,将这个三个商品加入购物车中去,并按价格从低到高输出。



public class Test1 {
    public static void main(String[] args) {
        List<Commodity> shoppingCar = new ArrayList<>();
        CommodityFactory commodityFactory = new CommodityFactory();
        // 向购物车 加入卫龙
        shoppingCar.add(commodityFactory.create(Food.class).createCommodity());
        // 向购物车 加入 oppo
        shoppingCar.add(commodityFactory.create(Phone.class).createCommodity());
        // 向购物车 加入 保暖裤
        shoppingCar.add(commodityFactory.create(Clothes.class).createCommodity());
        // 排序
        shoppingCar.sort((o1, o2) -> {return o1.getPrice().compareTo(o2.getPrice());});
        System.out.println(shoppingCar);
    }
}

/**
 * 商品类
 */
class Commodity{
    /**
     * id
     */
    private int id;
    /**
     * 价格
     */
    private BigDecimal price;
    /**
     * 产品名称
     */
    private String name;

    @Override
    public String toString() {
        return "Commodity{" +
                "id=" + id +
                ", 价格=" + price + "元" +
                ", 产品名称='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

interface ICommodity{
    Commodity createCommodity();
}

/**
 * 创建 商品的工厂
 */
class CommodityFactory{
    /**
     * 反射创建 对应的 类
     * @param clazz
     * @return
     */
    public ICommodity create(Class<? extends ICommodity> clazz){
        try {
            if (clazz != null){
                return clazz.newInstance();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}

class Phone implements ICommodity{
    @Override
    public Commodity createCommodity() {
        Commodity commodity = new Commodity();
        commodity.setId(1);
        commodity.setName("oppo");
        commodity.setPrice(new BigDecimal("1999"));
        return commodity;
    }
}

class Food implements ICommodity{
    @Override
    public Commodity createCommodity() {
        Commodity commodity = new Commodity();
        commodity.setId(3);
        commodity.setName("卫龙");
        commodity.setPrice(new BigDecimal("0.5"));
        return commodity;
    }
}

class Clothes implements ICommodity{
    @Override
    public Commodity createCommodity() {
        Commodity commodity = new Commodity();
        commodity.setId(4);
        commodity.setName("保暖裤");
        commodity.setPrice(new BigDecimal("19"));
        return commodity;
    }
}

这玩意儿你不说清楚实在是想不到难点问题在哪儿;
建类不会?
类属性不会?
多参数构造方法不会?
List 不会?
排序不会?
输出不会?

写一个接口(加入购物车行为),再写一个类实现这个接口,或者直接让商品类去实现这个接口

普通工厂模式


   @Data
    @Builder
    public class Commodity {
        private int id;
        private String name;
        private String price;
    }

    public interface Shopping {
        Commodity shopping();
    }

    public class OppoShop implements Shopping {
        @Override
        public Commodity shopping() {
            Commodity commodity = Commodity.builder()
                    .id(1)
                    .name("oppo")
                    .price("1").build();
            return commodity;
        }
    }

    public class WLShop implements Shopping {
        @Override
        public Commodity shopping() {
            Commodity commodity = Commodity.builder()
                    .id(2)
                    .name("卫龙")
                    .price("2").build();
            return commodity;
        }
    }

    public class BLKShop implements Shopping {
        @Override
        public Commodity shopping() {
            Commodity commodity = Commodity.builder()
                    .id(3)
                    .name("保暖裤")
                    .price("3").build();
            return commodity;
        }
    }

    public class ShoppingFactory {
        public Shopping shop(String type) {
            switch (type) {
                case "oppo":
                    return new OppoShop();
                case "wl":
                    return new WLShop();
                case "blk":
                    return new BLKShop();
                default:
                    return null;
            }
        }
    }

    public void test() {
        ShoppingFactory shoppingFactory = new ShoppingFactory();
        Shopping shopping = shoppingFactory.shop("oppo");
        Commodity oppoCom = shopping.shopping();

        shopping = shoppingFactory.shop("wl");
        Commodity wlcom = shopping.shopping();

        shopping = shoppingFactory.shop("blk");
        Commodity blkCom = shopping.shopping();

        List<Commodity> commodities = new ArrayList<Commodity>(){{
            add(oppoCom);
            add(wlcom);
            add(blkCom);
        }};
        commodities.stream().sorted(Comparator.comparing(Commodity::getPrice)).collect(Collectors.toList());
        System.out.println(commodities.toString());
    }