阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。
【Java代码】
interfaceItem{publicvoidaccept(Visitorvisitor);publicdoublegetPrice();}classBook(1){privatedoubleprice;publicBook(doubleprice){(2);}publicvoidaccept(Visitorvisitor){//访问本元素(3);}publicdoublegetPrice(){returnprice;}}//其它物品类略interfaceVisitor{publicvoidvisit(Bookbook);//其它物品的visit方法}classCashier(4){privatedoubletotalForCart;//访问Book类型对象的价格并累加(5){//假设Book类型的物品价格超过10元打8折if(book.getPrice()<10.0){totalForCart+=book.getPrice();}elsetotalForCart+=book.getPrice()*0.8;}//其它visit方法和折扣策略类似,此处略publicdoublegetTotal(){returntotalForCart;}}classShoppingCart{//normalshoppingcartstuffprivatejava.util.ArrayListitems=newjava.util.ArrayList<>();publicdoublecalculatePrice(){Cashiervisitor=newCashier();for(Itemitem:items){(6);}doubletotal=visitor.getTotal();returntotal;}publicvoidadd(Iteme){this.items.add(e);}}
(1)implements Item (2)this.price=price (3)visitor.visit(this) (4)implements Visitor (5)public void visit(Book book) (6)item.accept(visitor)【解析】 这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法