示例:
某图书馆里系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇个25页的论文,那么馆藏文献的总页码就是590页)。适合采用Visitor模式实现该要求。
Java程序如下:
public interface LibraryVisitor {
void visit(Book p_book);
void visit(Article p_article);
void printSum();
}
public class LibrarySumPrintVisitor implements LibraryVisitor {//打印总页数
private int sum = 0;
@Override
public void visit(Book p_book) {
sum = sum + p_book.getNumberOfPages();
}
@Override
public void visit(Article p_article) {
sum = sum + p_article.getNumberOfPages();
}
@Override
public void printSum() {
System.out.println("SUM="+sum);
}
}
public interface LibraryItemInterface {
void accept(LibraryVisitor visitor);
}
public 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){
m_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);
}
}
public 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){
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);
}
}
该示例来源于软件设计师教程