10月18日

[实验任务一]:打包员

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

实验要求:

1.  画出对应的类图;

2.  提交源代码;

3. 注意编程规范。

 

实验内容:

1.  类图:

 

 

2.  源代码:

 

package org.example;

public interface Product {
    void accept(Visitor visitor);
}

 

package org.example;



public class Apple implements Product {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

package org.example;

public class Book implements Product {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

package org.example;

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);
}

package org.example;

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 + "买书");
    }
}

public class Packer extends Visitor {
    @Override
    public void visit(Apple apple) {
        System.out.println("打包员" + name + "给苹果打包");
    }
    @Override
    public void visit(Book book) {
        System.out.println("打包员" + name + "给书打包");
    }
}
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 + "直接计算书的价格");
    }
}
public class BuyBasket {
    private List<Product> products = new ArrayList();
    public void accept(Visitor visitor) {
        for (Product product : products) {
            product.accept(visitor);
        }
    }
    public void addProduct(Product p) {
        products.add(p);
    }
    public void removeProduct(Product p) {
        products.remove(p);
    }
}
public class test {
    public static void main(String[] args) {
        BuyBasket buyBasket = new BuyBasket();
        buyBasket.addProduct(new Apple());
        buyBasket.addProduct(new Book());
        Visitor saler = new Saler();
        saler.setName("牟兆迪");
        System.out.println("----收银员----");
        buyBasket.accept(saler);
        Visitor packer = new Packer();
        packer.setName("郭永刚");
        System.out.println("----打包员----");
        buyBasket.accept(packer);
        Visitor customer = new Customer();
        customer.setName("陈志峰");
        System.out.println("----顾客----");
        buyBasket.accept(customer);
    }
}

 

3.  运行截图:

 

posted @ 2024-10-18 21:41  序章0  阅读(10)  评论(0)    收藏  举报