刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

第五题

 

阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。

   

 图5-1类图

问题:5.1   【Java代码】
interface Item{
    public void accept(Visitor visitor);
    public double getPrice();
}

class Book (1){
    private double price;
    public Book(double price){(2);}
    public void accept(Visitor visitor){ //访问本元素
          (3);
    }
    public double getPrice() {
         return price;
    }
}
//其它物品类略
  interface Visitor {
     public void visit(Book book);
     //其它物品的visit方法
}

class Cashier(4){
    private double totalForCart;
    //访问Book类型对象的价格并累加
   (5){
    //假设Book类型的物品价格超过10元打8折
    if(book.getPrice()<10.0){
       totalForCart+=book.getPrice();
    } else
       totalForCart+=book.getPrice()*0.8;
}
//其它visit方法和折扣策略类似,此处略

public double getTotal() {
     return totalForCart;
  }
}

class ShoppingCart {
      //normal shopping cart stuff
      private java.util.ArrayList<Item>items=new java.util.ArrayList<>();
      public double calculatePrice() {
          Cashier visitor=new Cashier();

          for(Item item:items) {
                  (6);
          }
          double total=visitor.getTotal();
          return total;
       }
       public void add(Item e) {
           this.items.add(e);
       }
}


使用微信搜索喵呜刷题,轻松应对考试!

答案:

implements Item
(2)this.price=price
(3)visitor.visit(this)
(4)implements Visitor
(5)public void visit(Book book)
(6)item.accept(visitor)


解析:

本题考察的是访问者模式在Java中的应用。访问者模式是一种行为设计模式,它封装了一些作用于某种数据结构(如类或对象集合)中元素的操作。该模式可以在不改变数据结构的前提下定义新的操作。

1.(1)处,由于Book类要实现Item接口,所以应使用“implements Item”。

2.(2)处,构造函数需要初始化对象的属性,所以应该是“this.price = price;”来表示初始化Book对象的price属性。

3.(3)处,在accept方法中,需要调用访问者的visit方法,所以应该是“visitor.visit(this);”。

4.(4)处,Cashier类需要实现Visitor接口,所以应使用“implements Visitor”。

5.(5)处,需要实现Visitor接口中的visit方法,针对Book类型物品进行价格访问和累加操作,所以应该是“public void visit(Book book) { … }”。

6.(6)处,在ShoppingCart类的calculatePrice方法中,需要遍历购物车中的所有物品,并调用每个物品的accept方法,让Cashier访问这些物品,所以应该是“item.accept(visitor);”。

创作类型:
原创

本文链接:第五题   阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下J

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share