大三每日总结

软件设计 石家庄铁道大学信息学院

实验 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. 注意编程规范。

 

posted @ 2023-11-27 08:26  摆烂达人  阅读(3)  评论(0编辑  收藏  举报