2024.12.11

设计模式实验二十五

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

 

实验 25:访问者模式

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

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

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

 
   

 

 

[实验任务一]:打包员

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

实验要求:

 

1.  画出对应的类图;

 

2.  提交源代码;

// 商品接口

public interface Item {

    void accept(Visitor visitor); // 允许访问者访问

}

 

// 具体商品:书籍

public class Book implements Item {

 

    private String title;

    private double price;

 

    public Book(String title, double price) {

        this.title = title;

        this.price = price;

    }

 

    @Override

    public void accept(Visitor visitor) {

        visitor.visit(this); // 允许打包员访问

    }

 

    public String getTitle() {

        return title;

    }

 

    public double getPrice() {

        return price;

    }

}

 

// 具体商品:电子产品

public class Electronics implements Item {

 

    private String brand;

    private double price;

 

    public Electronics(String brand, double price) {

        this.brand = brand;

        this.price = price;

    }

 

    @Override

    public void accept(Visitor visitor) {

        visitor.visit(this); // 允许打包员访问

    }

 

    public String getBrand() {

        return brand;

    }

 

    public double getPrice() {

        return price;

    }

}

// 访问者接口

public interface Visitor {

    void visit(Book book);         // 访问书籍

    void visit(Electronics electronics);  // 访问电子产品

}

// 打包员类,实现访问者接口

public class Packer implements Visitor {

 

    @Override

    public void visit(Book book) {

        System.out.println("正在打包书籍: " + book.getTitle());

    }

 

    @Override

    public void visit(Electronics electronics) {

        System.out.println("正在打包电子产品: " + electronics.getBrand());

    }

}

import java.util.ArrayList;

import java.util.List;

 

public class ShoppingCart {

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

 

    // 添加商品到购物车

    public void addItem(Item item) {

        items.add(item);

    }

 

    // 接受一个访问者,允许访问者访问所有商品

    public void accept(Visitor visitor) {

        for (Item item : items) {

            item.accept(visitor);  // 让每个商品接受访问者

        }

    }

}

public class Main {

    public static void main(String[] args) {

        // 创建购物车

        ShoppingCart cart = new ShoppingCart();

       

        // 添加商品

        cart.addItem(new Book("Java Programming", 59.99));

        cart.addItem(new Electronics("Apple iPhone", 999.99));

       

        // 创建打包员访问者

        Packer packer = new Packer();

       

        // 让打包员访问购物车中的所有商品并进行打包

        cart.accept(packer);

    }

}

3. 注意编程规范。

 

 

posted @ 2024-12-25 10:33  cvjj  阅读(25)  评论(0)    收藏  举报