20岁不会敲代码 2022-03-01 14:33 采纳率: 83.3%
浏览 92
已结题

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

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

  • 写回答

4条回答 默认 最新

  • qq_34370249 2022-03-01 17:54
    关注
    
    
    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;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月1日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab