其他的内容也不多说了,就上代码吧,对于VISITOR模式的理解考试的时候也是才看的,回来敲了一下程序感觉是可行的。
这里名字可能和考试的时候不一样,因为是自己回忆着写的,但大体模式是这样的,大家看看吧不对的还望批评指正!
package com.library;
import com.bean.Article;
import com.bean.Book;
public interface LibraryVisitor {
void visit(Book p_book);
void visit(Article p_article);
void printSum();
}
package com.library;
import com.bean.Article;
import com.bean.Book;
public class LibraryPerfom implements LibraryVisitor{
private int sum = 0;
//添加实体的visit
@Override
public void visit(Book p_book) {
this.sum += p_book.getNumpages();
}
@Override
public void visit(Article p_article) {
this.sum += p_article.getNumpages();
}
@Override
public void printSum() {
System.out.println(this.sum);
}
}
package com.library;
public interface LibraryItem {
void accept(LibraryVisitor visitor);
}
package com.bean;
import com.library.LibraryItem;
import com.library.LibraryVisitor;
public class Article implements LibraryItem{
// private String a_name;
private int front_pages;
private int end_pages;
public Article(int front_pages, int end_pages) {
super();
// this.a_name = a_name;
this.front_pages = front_pages;
this.end_pages = end_pages;
}
public int getNumpages(){
return end_pages - front_pages;
}
@Override
public void accept(LibraryVisitor visitor) {
visitor.visit(this);
}
}
package com.bean;
import com.library.LibraryItem;
import com.library.LibraryVisitor;
public class Book implements LibraryItem{
// private String b_name;
private int front_pages;
private int end_pages;
public Book(int front_pages, int end_pages) {
super();
// this.b_name = b_name;
this.front_pages = front_pages;
this.end_pages = end_pages;
}
public int getNumpages(){
return this.end_pages-this.front_pages;
}
@Override
public void accept(LibraryVisitor visitor) {
visitor.visit(this);
}
}
测试程序
package com.bean;
import com.library.LibraryPerfom;
public class Test {
public static void main(String[] args) {
Book book = new Book(0, 100);
Article article = new Article(0,50);
LibraryPerfom lp = new LibraryPerfom();
book.accept(lp);;
article.accept(lp);
lp.printSum();
}
}
运行结果为150符合实际情况。
最后我还想吐槽一下java的种种设计模式,有什么单例模式、策略模式、Observer模式、工厂模式、模板模式。。。。加之这次软考所涉及的VISITOR模式,我就搞不懂了java搞这么多模式其实很多实现方式是差不多的,很多用了组合的方式,而非继承,就是多用接口去实现。其实特么的简单的一个东西被说的那么复杂。对我说的有疑问的童鞋仔细对比Observer、VISITOR和DIRECTOR反正我发现本质都差不多。设计模式只是个思想罢了,搞这么复杂也完全是因为java语言自身的局限性,什么单继承之类。烦的要死!!!