实验 25:访问者模式

.

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

 

实验 25:访问者模式

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

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

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

 
   

 


[实验任务一]:打包员

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

实验要求:

1. 提交源代码,不要提交类图;

2. 注意编程规范。

 

 

 

 

package buyCar;

import java.util.ArrayList;
import java.util.Iterator;

interface Product {
    void accept(Visitor visitor);
}

class Apple implements Product {

    @Override
    public void accept(Visitor visitor) {
        // TODO Auto-generated method stub
       
visitor.visit(this);
    }

}

class Book implements Product {

    @Override
    public void accept(Visitor visitor) {
        // TODO Auto-generated method stub
       
visitor.visit(this);
    }

}

class BuyBasket {
    private ArrayList list = new ArrayList();

    public void accept(Visitor visitor) {
        Iterator i = list.iterator();

        while (i.hasNext()) {
            ((Product) i.next()).accept(visitor);
        }
    }

    public void addProduct(Product product) {
        list.add(product);
    }

    public void removeProduct(Product product) {
        list.remove(product);
    }
}

class Customer extends Visitor {

    @Override
    public void visit(Apple apple) {
        // TODO Auto-generated method stub
       
System.out.println("顾客" + name + "选苹果。");
    }

    @Override
    public void visit(Book book) {
        // TODO Auto-generated method stub
       
System.out.println("顾客" + name + "买书。");
    }

}

class Packer extends Visitor {

    @Override
    public void visit(Apple apple) {
        // TODO Auto-generated method stub
       
System.out.println("打包员" + name + "给苹果打包。");
    }

    @Override
    public void visit(Book book) {
        // TODO Auto-generated method stub
       
System.out.println("打包员" + name + "给书打包。");
    }

}

class Saler extends Visitor {

    @Override
    public void visit(Apple apple) {
        // TODO Auto-generated method stub
       
System.out.println("收银员" + name + "给苹果过秤,然后计算其价格");
    }

    @Override
    public void visit(Book book) {
        // TODO Auto-generated method stub
       
System.out.println("收银员" + name + "直接计算书的价格。");
    }

}

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

class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
Product b1 = new Book();
        Product b2 = new Book();
        Product a1 = new Apple();
        Visitor visitor;

        BuyBasket basket = new BuyBasket();
        basket.addProduct(b1);
        basket.addProduct(b2);
        basket.addProduct(a1);

        visitor = new Customer();
        visitor.setName("张三");
        basket.accept(visitor);
        System.out.println("----------------------------");
        visitor = new Packer();
        visitor.setName("李四");
        basket.accept(visitor);
        System.out.println("----------------------------");
        visitor = new Saler();
        visitor.setName("王五");
        basket.accept(visitor);
    }

}

 

posted @   花伤错零  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示