实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1. 提交源代码,不要提交类图;
2. 注意编程规范。
package test25; public class Apple implements Product { @Override public void accept(Visitor visitor) { visitor.visit(this); } } package test25; public class Book implements Product{ @Override public void accept(Visitor visitor) { visitor.visit(this); } } package test25; import java.util.ArrayList; import java.util.Iterator; public class BuyBasket{ private ArrayList list = new ArrayList(); public void accept(Visitor visitor){ Iterator iterator = list.iterator(); while (iterator.hasNext()){ ((Product)iterator.next()).accept(visitor); } } public void addProduce(Product product){ list.add(product); } public void removeProduce(Product product){ list.remove(product); } } package test25; public class Client { public static void main(String[] args) { Product b1 = new Book(); Product b2 = new Book(); Product a1 = new Apple(); Visitor visitor; BuyBasket basket = new BuyBasket(); basket.addProduce(b1); basket.addProduce(b2); basket.addProduce(a1); visitor = new Packager(); visitor.setName("张三"); basket.accept(visitor); } } package test25; public class Customer extends Visitor{ @Override public void visit(Apple apple) { System.out.println("顾客"+name+"选苹果"); } @Override public void visit(Book book) { System.out.println("顾客"+name+"买书"); } } package test25; public class Packager extends Visitor{ @Override public void visit(Apple apple) { System.out.println("打包员"+name+"打包苹果"); } @Override public void visit(Book book) { System.out.println("打包员"+name+"打包书籍"); } } package test25; public interface Product { void accept(Visitor visitor); } package test25; public class Saler extends Visitor{ @Override public void visit(Apple apple) { System.out.println("收银员"+ name+"给苹果过称,计算价格"); } @Override public void visit(Book book) { System.out.println("收银员"+name+"直接计算书的价格"); } } package test25; 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); }
标签:总结,name,package,visitor,void,visit,public,12.1,每日 From: https://www.cnblogs.com/louwangshayu/p/17870979.html