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