2024/12/04
软件设计实验二十五
[实验任务一]:打包员 在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。 实验要求: 1. 画出对应的类图; 2. 提交源代码; public interface Product { void accept(Visitor visitor); } public class Apple implements Product { @Override public void accept(Visitor visitor) { visitor.visit(this); } } public class Book implements Product{ @Override public void accept(Visitor visitor) { visitor.visit(this); } } public abstract class Visitor { protected String name; public void setName(String name){ this.name = name; } public abstract void visit(Apple apple); public abstract void visit(Book book); } public class Customer extends Visitor{ @Override public void visit(Apple apple) { System.out.println("顾客"+name+"选苹果"); } @Override public void visit(Book book) { System.out.println("顾客"+name+"买书"); } } public class Packager extends Visitor{ @Override public void visit(Apple apple) { System.out.println("打包员"+name+"打包apple~"); } @Override public void visit(Book book) { System.out.println("打包员"+name+"打包book~"); } } public class Saler extends Visitor{ @Override public void visit(Apple apple) { System.out.println("收银员"+ name+"给苹果过称,计算价格"); } @Override public void visit(Book book) { System.out.println("收银员"+name+"直接计算书的价格"); } } public class BuyBasket{ private ArrayList list = new ArrayList(); public void accept(Visitor visitor){ Iterator iterator = list.iterator(); while (iterator.hasNext()){ ((Product)iterator.next()).accept(visitor); } } public void addProduce(Product product){ list.add(product); } public void removeProduce(Product product){ list.remove(product); } } public class App { public static void main(String[] args) { // 创建产品实例 Product apple = new Apple(); Product book = new Book(); // 创建一个购物篮并添加产品 BuyBasket basket = new BuyBasket(); basket.addProduce(apple); basket.addProduce(book); // 创建顾客访客 Customer customer = new Customer(); customer.setName("王瑞"); System.out.println("顾客互动:"); basket.accept(customer); // 顾客访问产品 System.out.println(); // 为了输出更清晰 // 创建打包员访客 Packager packager = new Packager(); packager.setName("张一捆"); System.out.println("打包员互动:"); basket.accept(packager); // 打包员访问产品 System.out.println(); // 为了输出更清晰 // 创建收银员访客 Saler saler = new Saler(); saler.setName("龚涵彬"); System.out.println("收银员互动:"); basket.accept(saler); // 收银员访问产品 } }