测试:
- IUserService userService = new UserService();
- UserInvocationHandler uih = new UserInvocationHandler(userService);
- IUserService proxy = (IUserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), new Class[] {IUserService.class}, uih);
- proxy.printAll(); // 打印出start : 1489665566456 print all users end : 1489665566457
组合模式
组合模式经常跟策略模式合营应用,用来组合所有的策略,并遍历这些策略找出知足前提的策略。之前写过一篇 SpringMVC关于json、xml主动转换的道理研究 文┞仿,琅绫擎springmvc把返回的返回值映射给用户的response做了一层抽象,封装到了HandlerMethodReturnValueHandler策略接口中。
在HandlerMethodReturnValueHandlerComposite类中,应用存在的HandlerMethodReturnValueHandler对返回值进行处理,在HandlerMethodReturnValueHandlerComposite内部的代码如下:
- // 策略集合
- private final List returnValueHandlers = new ArrayList();
- @Override
- public void handleReturnValue(Object returnValue, MethodParameter returnType,
- ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
- // 调用selectHandler办法
- HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);
- if (handler == null) {
- throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());
- }
- handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest); // 应用找到的handler进行处理
- }
- private HandlerMethodReturnValueHandler selectHandler(Object value, MethodParameter returnType) {
- boolean isAsyncValue = isAsyncReturnValue(value, returnType);
- // 遍历存在的HandlerMethodReturnValueHandler
- for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
推荐阅读
自负年夜 Google 的人工智能 AlphaGO 成为围棋界的百胜将近开端,AI(Artificial Intelligence,人工智能)这两个英文字,刹那间成为科技业最热点的关键字之一。而就在2017岁首?年代,早在>>>详细阅读
本文标题:记录自己理解的一些设计模式
地址:http://www.17bianji.com/lsqh/34663.html
1/2 1