访问者模式类图与代码

某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本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);// 该访问者的具体实现
        }
    }
}

相关推荐

  1. 访问模式

    2024-04-15 02:02:02       64 阅读
  2. 访问模式

    2024-04-15 02:02:02       64 阅读
  3. 访问模式(Visitor)

    2024-04-15 02:02:02       57 阅读
  4. [go] 访问模式

    2024-04-15 02:02:02       60 阅读
  5. ·访问模式

    2024-04-15 02:02:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 02:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 02:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 02:02:02       87 阅读
  4. Python语言-面向对象

    2024-04-15 02:02:02       96 阅读

热门阅读

  1. [蓝桥杯 2023 国 B] 班级活动

    2024-04-15 02:02:02       42 阅读
  2. Linux系统命令三剑客awk

    2024-04-15 02:02:02       39 阅读
  3. Qt C++ 实现文件监视源码

    2024-04-15 02:02:02       29 阅读
  4. MacOS安装Homebrew教程

    2024-04-15 02:02:02       40 阅读
  5. pycharm 链接 MySQL

    2024-04-15 02:02:02       37 阅读
  6. 6. Mysql里面的GTID 全局事务标识 介绍

    2024-04-15 02:02:02       36 阅读
  7. 6.5-1Python之列表嵌套字典的使用

    2024-04-15 02:02:02       37 阅读
  8. C#面:如何使用 IFormattable 接口实现格式化输出

    2024-04-15 02:02:02       43 阅读
  9. js和ES的关系

    2024-04-15 02:02:02       44 阅读
  10. v3+antd+echarts的bug记录

    2024-04-15 02:02:02       40 阅读
  11. 【springboot开发】PO、DTO等对象的基本概念

    2024-04-15 02:02:02       41 阅读
  12. js中return的作用有什么?

    2024-04-15 02:02:02       40 阅读
  13. nodejs安装常用命令

    2024-04-15 02:02:02       47 阅读