访问者模式

实验 25:访问者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解访问者模式的动机,掌握该模式的结构;

2、能够利用访问者模式法解决实际问题。

 

[实验任务一]:打包员

在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。

实验要求:

1. 画出对应的类图;

 

 

2. 提交源代码;

import java.util.ArrayList;  

import java.util.List;  

 

// 商品接口  

interface Item {  

    void accept(Packer packer);  

}  

 

// 具体商品类 - 书本  

class Book implements Item {  

    private String title;  

 

    public Book(String title) {  

        this.title = title;  

    }  

 

    public String getTitle() {  

        return title;  

    }  

 

    @Override  

    public void accept(Packer packer) {  

        packer.pack(this);  

    }  

}  

 

// 具体商品类 - 水果  

class Fruit implements Item {  

    private String name;  

 

    public Fruit(String name) {  

        this.name = name;  

    }  

 

    public String getName() {  

        return name;  

    }  

 

    @Override  

    public void accept(Packer packer) {  

        packer.pack(this);  

    }  

}  

 

// 购物车类  

class ShoppingCart {  

    private List<Item> items = new ArrayList<>();  

 

    public void addItem(Item item) {  

        items.add(item);  

    }  

 

    public void accept(Packer packer) {  

        for (Item item : items) {  

            item.accept(packer);  

        }  

        packer.pack(this);  

    }  

}  

 

// 打包员类 - Visitor  

class Packer {  

    public void pack(Book book) {  

        System.out.println("打包书本: " + book.getTitle());  

    }  

 

    public void pack(Fruit fruit) {  

        System.out.println("打包水果: " + fruit.getName());  

    }  

 

    public void pack(ShoppingCart cart) {  

        System.out.println("打包购物车中的商品...");  

    }  

}  

 

// 主函数进行测试  

public class Main {  

    public static void main(String[] args) {  

        ShoppingCart cart = new ShoppingCart();  

        cart.addItem(new Book("Java 编程思想"));  

        cart.addItem(new Fruit("苹果"));  

 

        Packer packer = new Packer();  

        cart.accept(packer);  

    }  

}

3. 注意编程规范。

 

 

posted @ 2024-12-30 22:37  chrisrmas、  阅读(14)  评论(0)    收藏  举报