第五题阅读以下说明和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方法。