2015年上半年软考最后一题设计模式回忆

其他的内容也不多说了,就上代码吧,对于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语言自身的局限性,什么单继承之类。烦的要死!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值