大三每日总结
软件设计 石家庄铁道大学信息学院
实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1.提交源代码,不要提交类图;
package fangwen;
public class Apple implements Product{
@Override
public void accept(Visitor visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}
}
package fangwen;
public class Book implements Product{
@Override
public void accept(Visitor visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}
}
package fangwen;
import java.util.ArrayList;
import java.util.Iterator;
public class BuyBasket {
private ArrayList list=new ArrayList();
public void accept(Visitor visitor) {
Iterator i=list.iterator();
while(i.hasNext()) {
((Product)i.next()).accept(visitor);
}
}
public void addProduct(Product product) {
list.add(product);
}
public void removeProduct(Product product) {
list.remove(product);
}
}
package fangwen;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Product b1=new Book();
Product b2=new Book();
Product a1=new Apple();
Visitor visitor;
BuyBasket basket=new BuyBasket();
basket.addProduct(b1);
basket.addProduct(b2);
basket.addProduct(a1);
visitor=new Customer();
visitor.setName("小一");
basket.accept(visitor);
System.out.println("*******************");
visitor=new Packer();
visitor.setName("小二");
basket.accept(visitor);
System.out.println("*********************");
visitor=new Saler();
visitor.setName("小三");
basket.accept(visitor);
}
}
package fangwen;
public class Customer extends Visitor{
@Override
public void visit(Apple apple) {
// TODO Auto-generated method stub
System.out.println("顾客"+name+"选衣服");
}
@Override
public void visit(Book book) {
// TODO Auto-generated method stub
System.out.println("顾客"+name+"选食物");
}
}
package fangwen;
public class Packer extends Visitor{
@Override
public void visit(Apple apple) {
// TODO Auto-generated method stub
System.out.println("打包"+name+"衣服");
}
@Override
public void visit(Book book) {
// TODO Auto-generated method stub
System.out.println("打包"+name+"食物");
}
}
package fangwen;
public interface Product {
void accept(Visitor visitor);
}
package fangwen;
public class Saler extends Visitor{
@Override
public void visit(Apple apple) {
// TODO Auto-generated method stub
System.out.println("收银员"+name+"计算衣服价格");
}
@Override
public void visit(Book book) {
// TODO Auto-generated method stub
System.out.println("收银员"+name+"计算食物价格");
}
}
package fangwen;
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);
}
2. 注意编程规范。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南