访问者模式类图与代码

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

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

【Java 代码】

import java.util.*;interface Libraryvisitor {void visit(Book p_book); //访问Bookvoid visit(Article p_article);//访问 Articlevoid 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, intp_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.hqwc.cn/news/618342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java_04

Servlet: Servlet即serverapplet,指运行在服务器端的小程序,是sun公司提供的一门用于开发动态web资源的技术,通常我们也把实现了servlet接口的java程序也称为Servlet; package com.example.demo;import jakarta.servlet.*;impor…

利用Sentinel解决雪崩问题(一)流量控制

1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待;舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离;熔断降级:由断路器统计业务…

数据——关键生产要素

数据作为数字经济时代的关键生产要素,逐步融入生产生活各方面,深刻影响并重构着经济社会运行和社会治理,已成为影响未来发展的关键战略性资源。近年来,我国高度重视发展数字经济、数据要素及其市场化配置改革,发布了一…

风电机组中仍然装有电动机吗?

风电机组中确实装有电动机。虽然风电机组的主要功能是将风能转换为电能,但在其启动和运行过程中,电动机发挥着不可或缺的作用。 在风电机组的启动阶段,电动机负责提供初始的启动动力。由于风力发电的特性,风电机组并不能在任意风…

快速安装/升级/卸载Ascend配套软件包

一、参考资料 配套MindSpore 昇腾软件安装指引(23.0.RC3) 快速安装CANN 二、安装Ascend配套软件包 1. Ascend配套软件包简介 Ascend配套软件包,包括:固件、驱动和CANN(Compute Architecture for Neural Networks&…

【设计模式】六大设计原则

设计原则 研究 23 种设计模式是困难的,甚至是没必要的六大设计原则零、单一职责原则开闭原则里氏代换原则依赖倒置原则接口隔离原则迪米特法则合成复用原则 研究 23 种设计模式是困难的,甚至是没必要的 设计模式有23种,我认为对普通人来说想…

【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:C❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、类的作用域 二、类的实例化 三、类对象模型 四、this指针 1、this指针的引出 2 this指针的特…

机械转行网络安全自学经历,零基础学网络安全,血泪总结的干货

机械转行网络安全自学经历,零基础学网络安全,血泪总结的干货 我为什么转行.转行之路面试之路自学路上的学习资源 求职路上亦是如此,打开这篇文章,相信你也有转行的想法。和身边的朋友聊过,入职后的他们,或…

linux 内存寻址

(持续更新) 相关概念 查看的书籍为 深入linux内核 内存地址 当使用80x86(32位)微处理器时,一般分为三种不同的地址: 逻辑地址 包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址…

踩了一堆坑,终于掌握了postgreSQL主从流的精髓

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

【Linux】序列化与反序列化{服客编程/守护进程/JSON}

文章目录 1.引入2. 静态成员函数3.TCP:传输控制协议4.守护进程4.0前台进程4.1介绍4.2认识4.3会话4.3ps axj4.4理解4.5/dev/null4.6守护进程和孤儿进程 5.JSON6.完整代码6.1Makefile6.2Socket.hpp6.3Protocol.hpp6.4Log.hpp6.5Daemon.hpp6.6TcpServer.hpp6.7Client.c…

第二期书生浦语大模型训练营第三次作业

任务一:在茴香豆 Web 版中创建自己领域的知识问答助手 构建个人回答助手 进入web页面,传输属于自己的文件,此处进行输入大量投资领域资料,构建个人投资者问答助手 回答示例 茴香豆缺陷 此处会发现茴香豆仍然存在一些缺点&#…