2024.12.11
设计模式实验二十五
软件设计 石家庄铁道大学信息学院
实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
// 商品接口
public interface Item {
void accept(Visitor visitor); // 允许访问者访问
}
// 具体商品:书籍
public class Book implements Item {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this); // 允许打包员访问
}
public String getTitle() {
return title;
}
public double getPrice() {
return price;
}
}
// 具体商品:电子产品
public class Electronics implements Item {
private String brand;
private double price;
public Electronics(String brand, double price) {
this.brand = brand;
this.price = price;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this); // 允许打包员访问
}
public String getBrand() {
return brand;
}
public double getPrice() {
return price;
}
}
// 访问者接口
public interface Visitor {
void visit(Book book); // 访问书籍
void visit(Electronics electronics); // 访问电子产品
}
// 打包员类,实现访问者接口
public class Packer implements Visitor {
@Override
public void visit(Book book) {
System.out.println("正在打包书籍: " + book.getTitle());
}
@Override
public void visit(Electronics electronics) {
System.out.println("正在打包电子产品: " + electronics.getBrand());
}
}
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
private List<Item> items = new ArrayList<>();
// 添加商品到购物车
public void addItem(Item item) {
items.add(item);
}
// 接受一个访问者,允许访问者访问所有商品
public void accept(Visitor visitor) {
for (Item item : items) {
item.accept(visitor); // 让每个商品接受访问者
}
}
}
public class Main {
public static void main(String[] args) {
// 创建购物车
ShoppingCart cart = new ShoppingCart();
// 添加商品
cart.addItem(new Book("Java Programming", 59.99));
cart.addItem(new Electronics("Apple iPhone", 999.99));
// 创建打包员访问者
Packer packer = new Packer();
// 让打包员访问购物车中的所有商品并进行打包
cart.accept(packer);
}
}
3. 注意编程规范。