软考软件设计师下午真题-面向对象的程序设计与实现-访问者设计模式(2015年上半年试题六))代码讲解

  • 说明
  • Java代码
  • 注释

说明

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

Java代码

import java.util.*;  //把util这个包下的全部类导入到程序中//*表示的是通配符,包括util的所有类interface LibraryVisitor { //定义算法的公共接口LibraryVisitorpublic void visit(Book p_book);public void visit(Article p_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.getNumberOfPages();}public void printSum() {System.out.println("SUM = " + sum);}
}interface LibraryItemInterface {public void accept(LibraryVisitor visitor);
}class Article implements LibraryItemInterface {private String m_title; //论文名private String m_author;   //论文作者private int  m_start_page;private int  m_end_page;public Article(String p_author, String p_title, int p_start_page, int p_end_page) { //定义公有属性的同名构造方法Articlem_title = p_title;m_author = p_author;m_start_page = p_start_page;m_end_page = p_end_page;}public int getNumberOfPages() {return m_end_page - m_start_page;}public void accept(LibraryVisitor visitor) {visitor.visit(this);  //通过accept的参数visitor来调用LibraryVisitor所提供的公共接口visit访问当前对象}
}class Book implements LibraryItemInterface {private String m_title;    //书名private String m_author;    //书作者private int m_pages;   //页教public Book(String p_author, String p_title,int p_ pages) { //定义公有属性的同名构造方法Bookm_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); //通过accept的参数visitor来调用LibraryVisitor所提供的公共接口visit访问当前对象}
}

注释

几点需要记住的:

  1. 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
  2. 抽象类的作用是为其子类提供统一的操作接口;
  3. 抽象类需要子类去继承,即extends;
  4. 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
  5. 接口里的方法都是抽象方法,abstract可省略,抽象方法无方法体;
  6. 调用抽象方法:对象名.方法名;
  7. 调用静态方法:类名.方法名;
  8. 实例化:父类 对象名= new 子类名();
  9. 类图中的+对应修饰符public;
  10. 类图中的-对应修饰符private,private表示私有的,只有本类内部可以使用;
  11. 私有的数据成员对象不能直接访问,因此在类中都会提供2组访问私有数据成员的方法,分别为get…方法和set…方法(…代表对应的数据成员名称);
  12. get…方法表示获取私有数据成员的值,其返回值类型为对应的数据成员的类型;
  13. set…方法表示对数据成员进行赋值,所要赋的值通常通过参数传递进去,方法的返回值类型通常为void
  14. 类图中的#对应修饰符protected,protected表示受保护的,只有本类或子类或父类中可以访问;
  15. 类图中的~对应修饰符package;
  16. 枚举类自动添加public、static、final修饰;
  17. this:当方法的参数名与类的成员变量同名时,可以借助this指针来进行区别;
  18. 类的成员变量的类型和方法的参数的类型应该保持相同;
  19. 为了表示类与类之间的聚集关系,使用了Java包中的类模板List,类模板List必须在实例化之后才能使用;

软考软件设计师下午真题-面向对象的程序设计与实现-访问者设计模式(2015年上半年试题六)Java代码讲解相关推荐

  1. 软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解

    软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))代码讲解 说明 Java代码 注释 说明 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且 ...

  2. 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解

    软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...

  3. 2022年下半年软考网络规划设计师下午真题及答案解析

    2022年下半年软考网络规划设计师下午真题及答案解析 试题一 案例一 某单位网站受到攻击,首页被非法篡改.经安全专业机构调查,该网站有一个两年前被人非法上传的后门程序,本次攻击就是因为其他攻击者发现该 ...

  4. 2021年11月软考网络规划设计师下午真题及答案解析

    2021年11月软考网络规划设计师下午真题及答案解析 试题一 阅读以下说明,回答问题1至问答4,将解答填入答题纸对应得解答栏内. (说明) 某园区组网图如图1-1所示,该网络中接入交换机利用QinQ技 ...

  5. 视频教程-2020软考软件设计师-上午真题解析视频课程-软考

    2020软考软件设计师-上午真题解析视频课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在<计 ...

  6. 视频教程-2020软考软件设计师下午案例分析视频培训课程-软考

    2020软考软件设计师下午案例分析视频培训课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在< ...

  7. 2021年软考信息安全工程师下午真题(考生回忆版)

    如有完整真题或更全的大佬,请在下面留言.万分感谢! 参考答案为个人理解和回忆,如有错误请在下方留言,感谢! 真题内容为考生回忆,只供学习交流使用,请勿用于商业用途! 2021年下午一共四道题 第一题 ...

  8. 2019上半年软件设计师 下午真题-简答题及免费答案(一)

    2019上半年软件设计师 下午真题-简答题及免费答案(一) 试题一(15分) 阅读下列说明和图,回答问题1至4,将解答填入答题纸的对应栏内. [说明] 某学校欲开发一学生跟踪系统,以便更自动化.更全面 ...

  9. 2021年11月软考网络规划设计师上午真题及答案解析

    2021年11月软考网络规划设计师上午真题及答案解析 1.为防范国家数据安全风险.维护国家安全.保障公共利益,2021年7月,中国网络安全审查办公室发布公告,对"滴滴出行".&qu ...

  10. 2022年下半年软考网络规划设计师论文真题

    2022年下半年软考网络规划设计师论文真题 试题 一 论5G与校园网络融合的规划与设计 近年来,教育部等部门印发了<教育信息化2 .0行动计划>: <关于推进教育新型基础设施建 设构 ...

最新文章

  1. 《系统分析与设计方法》 第8章 数据建模
  2. 论文笔记:ShuffleNet v2
  3. html中插人视频教程,HTML中插入视频并兼容所有浏览器
  4. mac os mojave也没有增加简体拼音的专用词汇
  5. kong 使用jwt RSA256证书
  6. android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
  7. 【离散数学中的数据结构与算法】八 排列与组合四
  8. python快速比较两个json_Python 比较两个json的方法
  9. linux mint 18安装中文,无法在Linux Mint 18.1“Serena”下安装pyFFTW
  10. Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行——怎么将Unix/Mac系统下的文件转换到Windows系统下
  11. Android 关于IC卡的读写和加密
  12. 百度竞价常用术语总结
  13. 基于HAL库使用cubemx配置,驱动MAX30102血氧传感器基础历程
  14. 水平居中和transform: translateY(-50%) 实现元素垂直居中
  15. 秦皇岛科学选育新品种 国稻种芯·中国水稻节:河北谱丰收曲
  16. C 实现Mysql增量备份_mysql增量备份 - lyle_luo的个人页面 - OSCHINA - 中文开源技术交流社区...
  17. 【Windows】关于Windows Powershell找不到打不开修复方法
  18. 直流电机参数术语中英文对照及解释
  19. Linux系统1.md
  20. 适合团队工作的软件,大家来看看有没有喜欢的吧

热门文章

  1. 数据库设计之需求分析
  2. 移动安全-APK加壳
  3. win10家庭中文版和专业版的区别
  4. deepin 惠普打印驱动安装
  5. 戴尔服务器系统备份还原工具,DELL备份恢复系统的小工具 Dell DataSafe Local Backup[网络技术]...
  6. mysql 日文乱码_Mysql 导入日文数据乱码问题
  7. Python(爬虫篇)--- 验证码破解【二】滑块验证码
  8. 5s管理清洁活动如何推行?
  9. 旧iPhone手机钱包中公交卡 银行卡 转移到新手机iPhone11上
  10. 过采样欠采样的处理方法