访问者模式类图与代码

news2024/11/16 18:46:30

某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文,那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求,得到如图7.16所示的类图。

访问者模式让增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。

【Java 代码】

import java.util.*;

interface Libraryvisitor {
    void visit(Book p_book); //访问Book

    void visit(Article p_article);//访问 Article

    void printSum();
}

class LibrarysumPrintvisitor implements Libraryvisitor {//打印总页数
    private int sum = 0;

    public void visit(Book p_book) {
        sum = sum + P_book.getNumberOfPages();
        public void visit (Article p_article){
            sum = sum + p_article.getNumberOfPages0;
        }
        public void printsum () {
            System.out.println("SUM=" + sum);
        }
    }

    interface libraryItemInterface {
        void accept(LibraryVisitor visitor); // 声明了一个接受操作,接受一个访问者对象
    }

    class Article implements libraryItemInterface {
        private String m_title; //论文名
        private String m_author; //论文作者
        private intm_start_page;
        private int m_end_page;

        public Article(String p_author, string p_title, int p_start_page, int
                p_end_page) {
            m title = p title;
            m_author = p_author;
            m_end_page = p_end_page;
        }

        public int qetNumbelOfPages() {
            rctum m_end_page -m_start_page;
        }

        public void accept(Libraryvisitor visitor) {
            visitor.visit(this); // 该访问者的具体实现
        }
    }

    class Book implements LibraryItemInterface {
        private String m_title; //书名
        private String m_author;//书作者
        private intm_pages;//页教

        public Book(String p_author, String p_title, int p_ pages) {
            m_title = p_title;
            m_author = p_author;
            m_pages = p_pages;
        }

        public int getNumberOfPages() {
            return m_pages;
        }

        public void accept(LibraryVisitor visitor) {
            visitor.visit(this);// 该访问者的具体实现
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1595255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript知识点 --javaweb学习笔记

什么是Javascript? JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互JavaScript 和Java 是完全不同的语言,不论是概念还是设计。但是基础语法类似JavaScript在1995 年由 Brendan Eich 发明,并…

Go微服务: 链路追踪jaeger原理和环境搭建

微服务中链路追踪作用 1 ) 概述 著名的管理学大师彼得德鲁克曾说过“If you can’t measure it, you can’t improve it”意思是:如果你不能度量它,你就无法改进它在微服务开发后期,服务会越来越多,调用链过多,进行链…

简历上写熟悉Linux下常用命令?直接寄

大家写简历技术栈时,都觉得越多越好,其中一条,熟悉Linux下常用命令?其实开发中Linux不是必备考点,除了运维,真正用的多的仅仅cd ls mkdir等,但当面试官问到上面命令时,是不是就傻眼了…

Java开发从入门到精通(二十):Java的面向对象编程OOP:Stream流

Java大数据开发和安全开发 (一)Java的新特性:Stream流1.1 什么是Stream?1.2 Stream流的使用步骤1.3 获取Stream流1.4 Stream流常见的中间方法1.5 Stream流常见的终结方法 (一)Java的新特性:Stream流 1.1 …

【Vue】面试题

vue的组建通信方式 父子关系:props & $emit 、 $parent / $children 、 ref / $refs 、 插槽跨层级关系: provide & inject通用方案:Vuex 或 eventbus 插播:兄弟组建怎么通信? eventbusVuex通过中间件&…

学校4-11天梯赛选拔赛

目录 L1-5 6翻了 题目 输入格式: 输出格式: 输入样例: 输出样例: 思路 AC代码 L1-1 嫑废话上代码 题目 输入格式: 输出格式: 输入样例: 输出样例: AC代码 L1-8 刮刮彩…

温故知新之-TCP Keepalive机制及长短连接

[学习记录] 前言 TCP连接一旦建立,只要连接双方不主动 close ,连接就会一直保持。但建立连接的双方并不是一直都存在数据交互,所以在实际使用中会存在两种情况:一种是每次使用完,主动close,即短连接&…

建模设计软件 Archicad 27 for mac激活版

在建筑设计领域,每一次技术的革新都意味着设计效率和质量的飞跃。Archicad 27 for Mac,就是这样一款引领行业变革的设计软件。 Archicad 27凭借出色的性能优化和强大的功能更新,为Mac用户带来了前所未有的建筑设计体验。它支持BIM&#xff08…

5G网络开通与调测ipv4

要求如下: 1. 勘站规划 1. 【重】首先观察NR频点,完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下:观察AAU的通道数,最大发射功率;选择N41的选型频段也要选41 2. …

InnoDB中高度为3的B+树最多可以存多少数据?

参考: 🔥我说MySQL每张表最好不超过2000万数据,面试官让我回去等通知? - 掘金 考虑到磁盘IO是非常高昂的操作,计算机操作系统做了预读的优化,当一次IO时,不光把当前磁盘地址的数据,…

sudo apt install ros-humble-gazebo-*显示网络不可达 Ubuntu20.04使用清华镜像本地安装/更新ros2

问题 sudo apt install ros-humble-gazebo-*显示网络不可达,这是因为sources.list中的镜像源有问题,换成清华源可以解决问题 解决 1 设置Ubuntu镜像源为清华镜像源 1.1 备份source.list文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.ba…

GNU Radio创建Zadoff-Chu序列C++ OOT块

文章目录 前言一、ZC序列是什么?二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域图②、时域幅值模图③、IQ 曲线 四、其他五、资源自取 前言 本文实现在 GNU Radio 中创建 Zado…

连接两部VR头显的type-c DP分配器方案,可以给主机设备PD反向供电与两部VR同时供电。

随着type-c的发展,目前越来越多的设备都在使用type-c作为连接的接口, 不仅是笔记本与手机在使用现在的游戏主机如(任天堂,steam,)或者是VR的一体机或者是VR头显也都在使用type-c作为连接接口。 type-c接口…

CSS常用十大选择器(理论+代码实操)

HTML代码实例 注意&#xff1a;拷贝后本地运行注意head标签中的link标签的href属性是否正确 我的目录结构&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><lin…

使用新一代一站式 AI Bot 开发平台扣子coze,搭建我的第一个AI Bot(前端魔法师) ,

目录 1.概述​ 2.功能与优势 3.使用扣子 4.人设与回复逻辑 5.添加插件 6.预览与调试 7.发布bot Store 8.环境大家体验&#xff08;给大家内置了比较屌的插件&#xff09; 9.推荐阅读&#xff1a; 1.概述​ 扣子是新一代一站式 AI Bot 开发平台。无论你是否有编程基础…

代码学习记录42---动态规划

随想录日记part42 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.14 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;最长递增子序列 &#xff1b;最长连续递增序列 &#xff1b;最长重复子数组 ;最长公…

陇剑杯 ios 流量分析

陇剑杯 ios 流量分析 ios 一位ios的安全研究员在家中使用手机联网被黑&#xff0c;不仅被窃密还丢失比特币若干&#xff0c;根据流量分析完成ios1-8 ios 1 ios-1&#xff1a;黑客所控制的C&C服务器IP是_____________。 什么是C&C服务器? C&C&#xff08;Com…

UBuntu18.04通过ODBC连接MySQL远程数据库

今天在做一个Qt视频播放器的小项目然后想要在ubuntu18.04运行这个项目&#xff0c;需要在Qt中连接远程的MySQL数据库&#xff0c;所以用到了ODBC。我在连接时遇到了一些问题&#xff0c;加之网上的教程各说纷纭&#xff0c;所以我花了很多时间去解决&#xff0c;所以决定做做笔…

架构师系列-搜索引擎ElasticSearch(五)- 索引设计

索引创建后&#xff0c;要非常谨慎&#xff0c;创建不好后面会出现各种问题。 索引设计的重要性 索引创建后&#xff0c;索引分片只能通过_split和_shrink 接口对其进行成倍的增加和缩减。 ES的数据是通过_routing分配到各个分片上的&#xff0c;所以本质上不推荐区改变索引的…

链表-双指针-虚拟节点-力扣

链表--双指针--虚拟节点 力扣 142 环形链表求循环起点 重点力扣 21 合并两个有序链表力扣 86 分割链表力扣23 合并K个有序链表 -- 优先队列&#xff08;二叉堆 小顶堆&#xff09;重点力扣19 找倒数第N个元素 快慢指针 一次遍历 重点力扣876 快慢指针找中间节点力扣 160 相交链…