1、委派模式:是静态代理和策略模式的一种特殊组合!
2、委派者,被委派者
3、委派模式的注重的是结果
public class VingSerlvetDispatcher {
private List<Hander> list = new ArrayList<>();
public VingSerlvetDispatcher() {
try {
Class<ChangeController> clazz = ChangeController.class;
list.add(new Hander().setController(clazz.newInstance())
.setMethod(clazz.getDeclaredMethod("doSomeThing",String.class))
.setUrl("/ving/index.html")
);
} catch (Exception e) {
e.printStackTrace();
}
}
public void doServer(HttpServletRequest request, HttpServletResponse response){
doDispatch(request,response);
}
private void doDispatch(HttpServletRequest request, HttpServletResponse response){
String url = request.getRequestURI();
Hander handerTemp = null;
for (Hander hander : list) {
if(hander.getUrl().equals(url)){
handerTemp = hander;
}
}
handerTemp.getMethod().setAccessible(true);
try {
handerTemp.getMethod().invoke(handerTemp.getController(),"66666");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
class Hander{
private Object controller;
private Method method;
private String url;
public Object getController() {
return controller;
}
public Hander setController(Object controller) {
this.controller = controller;
return this;
}
public Method getMethod() {
return method;
}
public Hander setMethod(Method method) {
this.method = method;
return this;
}
public String getUrl() {
return url;
}
public Hander setUrl(String url) {
this.url = url;
return this;
}
}
public class ChangeController {
private void doSomeThing(String str){
System.out.println("11111"+str);
}
}