今天完成设计模式实验二十五访问者模式,以下为实验内容:
实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
- import java.util.ArrayList;
import java.util.List;
// 访问者接口
interface Visitor {
void visit(ItemA itemA);
void visit(ItemB itemB);
}
// 打包员访问者
class Packer implements Visitor {
@Override
public void visit(ItemA itemA) {
System.out.println("Packing " + itemA.getName() + " in box.");
}
@Override
public void visit(ItemB itemB) {
System.out.println("Packing " + itemB.getName() + " in bubble wrap.");
}
}
// 购物车项接口
interface Item {
void accept(Visitor visitor);
String getName();
}
// 具体购物车项A
class ItemA implements Item {
private String name;
public ItemA(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
// 具体购物车项B
class ItemB implements Item {
private String name;
public ItemB(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
// 购物车
class ShoppingCart {
private List<Item> items = new ArrayList<>();
public void add(Item item) {
items.add(item);
}
public void remove(Item item) {
items.remove(item);
}
public void accept(Visitor visitor) {
for (Item item : items) {
item.accept(visitor);
}
}
}
// 客户端测试类
public class VisitorPatternTest {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
cart.add(new ItemA("Apple"));
cart.add(new ItemB("Laptop"));
Visitor packer = new Packer();
cart.accept(packer);
}
}
3. 注意编程规范。
标签:String,日报,visitor,void,12.16,Visitor,public,name From: https://www.cnblogs.com/lijianlongCode13/p/18612795