实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
import java.util.ArrayList;
import java.util.List;
// 商品接口
interface Item {
void accept(Packer packer);
}
// 具体商品类 - 书本
class Book implements Item {
private String title;
public Book(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
@Override
public void accept(Packer packer) {
packer.pack(this);
}
}
// 具体商品类 - 水果
class Fruit implements Item {
private String name;
public Fruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void accept(Packer packer) {
packer.pack(this);
}
}
// 购物车类
class ShoppingCart {
private List<Item> items = new ArrayList<>();
public void addItem(Item item) {
items.add(item);
}
public void accept(Packer packer) {
for (Item item : items) {
item.accept(packer);
}
packer.pack(this);
}
}
// 打包员类 - Visitor
class Packer {
public void pack(Book book) {
System.out.println("打包书本: " + book.getTitle());
}
public void pack(Fruit fruit) {
System.out.println("打包水果: " + fruit.getName());
}
public void pack(ShoppingCart cart) {
System.out.println("打包购物车中的商品...");
}
}
// 主函数进行测试
public class Main {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
cart.addItem(new Book("Java 编程思想"));
cart.addItem(new Fruit("苹果"));
Packer packer = new Packer();
cart.accept(packer);
}
}
3. 注意编程规范。