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

简答题

第五题

 

阅读以下说明和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)类Book需要实现接口Item,因此这里填写“implements Item”。

(2)在Book类的构造方法中,需要初始化价格属性。所以填写“this.price = price;”来将传入的price值赋给类的属性price。

(3)在Book类的accept方法中,需要调用Visitor的visit方法来访问该元素,所以填写“visitor.visit(this);”。这里的“this”代表当前Book类的实例。

(4)Cashier类需要实现Visitor接口,所以这里填写“implements Visitor”。

(5)在Cashier类中,需要实现Visitor接口的visit方法,专门用于访问Book类型对象。所以这里填写“public void visit(Book book) { … }”,并在括号内实现访问逻辑。

(6)在ShoppingCart类的calculatePrice方法中,需要遍历购物车中的所有物品,并对每个物品调用accept方法,以访问其价格并进行累加。所以这里填写“item.accept(visitor);”。这是利用访问者模式对购物车中的物品进行价格统计的关键步骤。

创作类型:
原创

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

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

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

分享考题
share