首页 > 其他分享 >访问者模式

访问者模式

时间:2024-12-30 22:42:34浏览次数:5  
标签:String packer void 模式 Packer pack public 访问者

实验 25:访问者模式

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

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

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

 

[实验任务一]:打包员

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

实验要求:

1. 画出对应的类图;

 

 

2. 提交源代码;

import java.util.ArrayList;  

import java.util.List;  

 

// 商品接口  

interface Item {  

    void accept(Packer packer);  

}  

 

// 具体商品类 - 书本  

class Book implements Item {  

    private String title;  

 

    public Book(String title) {  

        this.title = title;  

    }  

 

    public String getTitle() {  

        return title;  

    }  

 

    @Override  

    public void accept(Packer packer) {  

        packer.pack(this);  

    }  

}  

 

// 具体商品类 - 水果  

class Fruit implements Item {  

    private String name;  

 

    public Fruit(String name) {  

        this.name = name;  

    }  

 

    public String getName() {  

        return name;  

    }  

 

    @Override  

    public void accept(Packer packer) {  

        packer.pack(this);  

    }  

}  

 

// 购物车类  

class ShoppingCart {  

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

 

    public void addItem(Item item) {  

        items.add(item);  

    }  

 

    public void accept(Packer packer) {  

        for (Item item : items) {  

            item.accept(packer);  

        }  

        packer.pack(this);  

    }  

}  

 

// 打包员类 - Visitor  

class Packer {  

    public void pack(Book book) {  

        System.out.println("打包书本: " + book.getTitle());  

    }  

 

    public void pack(Fruit fruit) {  

        System.out.println("打包水果: " + fruit.getName());  

    }  

 

    public void pack(ShoppingCart cart) {  

        System.out.println("打包购物车中的商品...");  

    }  

}  

 

// 主函数进行测试  

public class Main {  

    public static void main(String[] args) {  

        ShoppingCart cart = new ShoppingCart();  

        cart.addItem(new Book("Java 编程思想"));  

        cart.addItem(new Fruit("苹果"));  

 

        Packer packer = new Packer();  

        cart.accept(packer);  

    }  

}

3. 注意编程规范。

 

 

标签:String,packer,void,模式,Packer,pack,public,访问者
From: https://www.cnblogs.com/Christmas77/p/18642632

相关文章

  • 模板方法模式
    实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。 [实验任务一]:数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义......
  • 建造者模式
    实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起......
  • 单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图; 2. ......
  • 适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图; 2.......
  • 桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 装饰模式
    实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。 [实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而......
  • 组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1.文件的执行不需真正实现,只需简单提......
  • 解锁 Java 解释器模式:赋予程序理解 “新语言” 的魔力
    解锁Java解释器模式:赋予程序理解“新语言”的魔力在Java编程的广袤天地中,我们时常面临需要处理自定义规则、语法或逻辑表达式的场景。此时,解释器模式(InterpreterPattern)宛如一位神奇的翻译官,能够将这些看似晦涩难懂的“新语言”,转化为计算机能够理解并执行的指令,为......
  • 揭秘 Java 中介者模式:解耦复杂交互的神奇钥匙
    揭秘Java中介者模式:解耦复杂交互的神奇钥匙在Java开发的浩瀚天地里,随着系统复杂度的与日俱增,对象之间的交互常常变得错综复杂,宛如一团乱麻。此时,中介者模式(MediatorPattern)宛如一位智慧的协调大师,挺身而出,为我们理清理顺这些复杂的关系,打造更为优雅、易于维护的代码架......
  • 深入理解 Java 模板模式:代码复用与架构优化的利器
    深入理解Java模板模式:代码复用与架构优化的利器在Java编程世界中,设计模式如同智慧的结晶,帮助开发者应对各种复杂的软件开发需求。其中,模板模式(TemplatePattern)以其独特的代码复用和流程标准化能力,成为构建灵活且可维护系统的关键工具。今天,让我们一同深入探究Java中......