当前位置: 移动技术网 > IT编程>开发语言>Java > SpringMVC适配器模式代码示例

SpringMVC适配器模式代码示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

兔兔tv8,大中电器网上商城店,学校标志设计

此处采用了适配器模式, 由于controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用controller方法,需要在代码中写成如下形式:

if(mappedhandler.gethandler() instanceof multiactioncontroller){ 
  ((multiactioncontroller)mappedhandler.gethandler()).xxx 
}else if(mappedhandler.gethandler() instanceof xxx){ 
  ... 
}else if(...){ 
  ... 
}

这样假设如果我们增加一个hardcontroller,就要在代码中加入一行 if(mappedhandler.gethandler() instanceof hardcontroller)
这种形式就使得程序难以维护,也违反了设计模式中的开闭原则 -- 对扩展开放,对修改关闭。

因此spring定义了一个适配接口,使得每一种controller有一种对应的适配器实现类,
让适配器代替controller执行相应的方法。这样在扩展controller 时,只需要增加一个适配器类就完成了springmvc的扩展了,真的是很精巧的做法!

废话不多说还是上代码吧,为了看得清楚,就自己实现一套代码来模拟springmvc, 直接贴spring源码容易降低关注点。

//定义一个adapter接口 
public interface handleradapter {
	public boolean supports(object handler);
	public void handle(object handler);
}
//以下是三种controller实现 
public interface controller {
}
public class httpcontroller implements controller{
	public void dohttphandler(){
		system.out.println("http...");
	}
}
public class simplecontroller implements controller{
	public void dosimplerhandler(){
		system.out.println("simple...");
	}
}
public class annotationcontroller implements controller{
	public void doannotationhandler(){
		system.out.println("annotation...");
	}
}
//下面编写适配器类 
public class simplehandleradapter implements handleradapter {
	public void handle(object handler) {
		((simplecontroller)handler).dosimplerhandler();
	}
	public boolean supports(object handler) {
		return (handler instanceof simplecontroller);
	}
}
public class httphandleradapter implements handleradapter {
	public void handle(object handler) {
		((httpcontroller)handler).dohttphandler();
	}
	public boolean supports(object handler) {
		return (handler instanceof httpcontroller);
	}
}
public class annotationhandleradapter implements handleradapter {
	public void handle(object handler) {
		((annotationcontroller)handler).doannotationhandler();
	}
	public boolean supports(object handler) {
		return (handler instanceof annotationcontroller);
	}
}
//模拟一个dispatcherservlet 
import java.util.arraylist;
import java.util.list;
public class dispatchservlet {
	public static list<handleradapter> handleradapters = new arraylist<handleradapter>();
	public dispatchservlet(){
		handleradapters.add(new annotationhandleradapter());
		handleradapters.add(new httphandleradapter());
		handleradapters.add(new simplehandleradapter());
	}
	public void dodispatch(){
		//此处模拟springmvc从request取handler的对象,仅仅new出,可以出,        
		//不论实现何种controller,适配器总能经过适配以后得到想要的结果 
		//   httpcontroller controller = new httpcontroller(); 
		//   annotationcontroller controller = new annotationcontroller(); 
		simplecontroller controller = new simplecontroller();
		//得到对应适配器 
		handleradapter adapter = gethandler(controller);
		//通过适配器执行对应的controller对应方法 
		adapter.handle(controller);
	}
	public handleradapter gethandler(controller controller){
		for (handleradapter adapter: this.handleradapters){
			if(adapter.supports(controller)){
				return adapter;
			}
		}
		return null;
	}
	public static void main(string[] args){
		new dispatchservlet().dodispatch();
	}
}

通过这个模式可以看出开源代码中的精妙,我们在看框架源码时需要有目标的看,这样会找到很多自己需要学习的东西,目前很多分析源码的帖子大部分是讲解what,how,

以此来抛砖引玉,希望各位能够一起来讨论“why”

总结

以上就是本文关于springmvc适配器模式代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网