首页 > 其他分享 >实验 25:访问者模式

实验 25:访问者模式

时间:2024-11-27 09:23:57浏览次数:9  
标签:25 name Visitor void visit 实验 println public 访问者

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

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

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

 

[实验任务一]:打包员

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

实验要求:

1. 画出对应的类图;

2. 提交源代码;

3. 注意编程规范。

1、类图

 

2、源代码

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;

import java.util.ArrayList;
import java.util.List;
 
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);
    }
}

package org.example;

public class Client {
 
    public static void main(String[] args) {
        BuyBasket buyBasket = new BuyBasket();
 
        buyBasket.addProduct(new Apple());
        buyBasket.addProduct(new Book());
 
        Visitor saler = new Saler();
        saler.setName("ax");
        System.out.println("----收银员----");
        buyBasket.accept(saler);
 
        Visitor packer = new Packer();
        packer.setName("gx");
        System.out.println("----打包员----");
        buyBasket.accept(packer);
 
        Visitor customer = new Customer();
        customer.setName("yxl");
        System.out.println("----顾客----");
        buyBasket.accept(customer);
    }
}

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

package org.example;

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 + "给书打包");
    }
}

package org.example;

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

package org.example;

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 + "直接计算书的价格");
 
    }
}

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

 

3、运行截图

 

 

 

标签:25,name,Visitor,void,visit,实验,println,public,访问者
From: https://www.cnblogs.com/yuanxinglan/p/18571511

相关文章

  • 实验 24:模板方法模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。 [实验任务一]:数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()......
  • 11月25日总结
    今天又是周一主要学习了数据流图以及上下文图的画法以及本质1.1数据流图的概念数据流图(DataFlowDiagram,DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。数据流图的优点:在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处......
  • 20222322 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容1.1实验要求(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取相关信息。(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。(3)使用nmap开源软件对靶机环境进行扫描,回答以下问题并给出操作命令。(4)使用Ne......
  • 芯片基础详解:总线、256字节随机存储器、模式选择器(指令解码器)、条件判断器
    总线总线:从正确的输入端将数值复制到正确的输出端。总线电路------------------------------------------------------------------------------------------256字节随机存储器256字节随机存储器电路---------------------------------------------------------------......
  • w~视觉~合集25
    我自己的原文哦~  https://blog.51cto.com/whaosoft/12627822#MeanShift简单的介绍 MeanShift的数学原理和代码实现,基于均值漂移法MeanShift的图像分割MeanShift算法简介从分割到聚类对于图像分割算法,一个视角就是将图像中的某些点集分为一类(前景),另外一些点集......
  • 【Autodesk Revit 2025下载与安装】
    1、安装包「Revit2025」:链接:https://pan.quark.cn/s/9342ceb1f179提取码:WmPW2、安装教程(建议关闭杀毒软件)1)       双击Setup.exe安装,弹窗安装对话框  2)       勾选‘我同意。。’,点击下一步  3)       选择软件安装路径,建议C盘之外进......
  • 20222326 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容实验具体内容:一、从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whoisdignslookuptraceroute以及各类......
  • 阿里云服务器smtp.exmail.qq.com:25端口访问超时的解决办法
    错误原因:阿里云服务器默认关闭25端口以防止垃圾邮件。解决办法:在阿里云控制台的安全组规则中添加25端口。如果仍然无法连接,尝试使用465端口并通过SSL加密。修改邮件发送设置,将SMTP端口改为465并开启SSL。QQ企业邮箱端口配置:POP3/SMTP协议:接收邮件服务器:pop.exmail.qq......
  • 操作系统实验 4 文件系统设计
    一、实验目的通过一个简单文件系统的设计,加深理解文件系统的内部功能及内部实现。二、主要仪器设备、试剂或材料VMware虚拟机三、实验内容为Linux系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令。mkdir创建目录rmdir删除目录c......
  • 计算机组成原理实验五 节拍发生器
    一、实验目的和要求了解CPU时序系统的工作原理;掌握层次化的方法;掌握节拍发生器的工作原理和构成。二、实验内容设计一个3位二进制同步计数器和一个3线~8线译码器,当计数器在连续时钟脉冲作用下,其输出通过译码后在实验板的8个指示灯依次显示出来。三、主要仪器......