软件设计:实验 25:访问者模式

实验 25:访问者模式

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

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

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

 

[实验任务一]:打包员

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

实验要求:

1. 画出对应的类图;

2. 提交源代码;

3. 注意编程规范。

1.

 

2.

import java.util.ArrayList;

import java.util.List;

 

// 元素接口

interface Element {

    void accept(Visitor visitor);

}

 

// 具体元素:商品

class Item implements Element {

    private String name;

    private double price;

 

    public Item(String name, double price) {

        this.name = name;

        this.price = price;

    }

 

    public String getName() {

        return name;

    }

 

    public double getPrice() {

        return price;

    }

 

    @Override

    public void accept(Visitor visitor) {

        visitor.visit(this);

    }

}

 

// 访问者接口

interface Visitor {

    void visit(Item item);

}

 

// 计算价格访问者

class CalculatePriceVisitor implements Visitor {

    private double total;

 

    public CalculatePriceVisitor() {

        this.total = 0;

    }

    @Override

    public void visit(Item item) {

        total += item.getPrice();

        System.out.println("Item: " + item.getName() + ", Price: " + item.getPrice());

    }

 

    public double getTotal() {

        return total;

    }

}

 

// 显示信息访问者

class DisplayVisitor implements Visitor {

    @Override

    public void visit(Item item) {

        System.out.println("Displaying item: " + item.getName());

    }

}

 

// 打包员访问者

class Packer implements Visitor {

    @Override

    public void visit(Item item) {

        System.out.println("Packing item: " + item.getName());

    }

}

 

// 购物车

class ShoppingCart {

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

 

    public void addElement(Element element) {

        items.add(element);

    }

 

    public void accept(Visitor visitor) {

        for (Element item : items) {

            item.accept(visitor);

        }

    }

}

 

// 客户端代码

public class VisitorPatternDemo {

    public static void main(String[] args) {

        ShoppingCart cart = new ShoppingCart();

        cart.addElement(new Item("Apple", 1.99));

        cart.addElement(new Item("Banana", 0.99));

        cart.addElement(new Item("Orange", 2.99));

 

        System.out.println("Displaying items:");

        cart.accept(new DisplayVisitor());

 

        System.out.println("Calculating total price:");

        CalculatePriceVisitor priceVisitor = new CalculatePriceVisitor();

        cart.accept(priceVisitor);

        System.out.println("Total price: " + priceVisitor.getTotal());

 

        System.out.println("Packing items:");

        cart.accept(new Packer());

    }

}

 

 

posted @ 2024-12-05 18:55  痛苦代码源  阅读(2)  评论(0编辑  收藏  举报