作家
登录

记录自己理解的一些设计模式

作者: 来源: 2017-04-08 19:03:08 阅读 我要评论

 
  • @AllArgsConstructor  
  • class UserInvocationHandler implements InvocationHandler {  
  • private IUserService userService;  
  • @Override  
  • public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
  • System.out.println("start : " + System.currentTimeMillis());  
  • Object result = method.invoke(userService, args);  
  • System.out.println("end : " + System.currentTimeMillis());  
  • return result;  
  •  
  • 测试:

    1. IUserService userService = new UserService();  
    2. UserInvocationHandler uih = new UserInvocationHandler(userService);  
    3. IUserService proxy = (IUserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), new Class[] {IUserService.class}, uih); 
    4. proxy.printAll(); // 打印出start : 1489665566456 print all users end : 1489665566457 

    组合模式

    组合模式经常跟策略模式合营应用,用来组合所有的策略,并遍历这些策略找出知足前提的策略。之前写过一篇 SpringMVC关于json、xml主动转换的道理研究 文┞仿,琅绫擎springmvc把返回的返回值映射给用户的response做了一层抽象,封装到了HandlerMethodReturnValueHandler策略接口中。

    在HandlerMethodReturnValueHandlerComposite类中,应用存在的HandlerMethodReturnValueHandler对返回值进行处理,在HandlerMethodReturnValueHandlerComposite内部的代码如下:

    1. // 策略集合  
    2. private final List returnValueHandlers = new ArrayList();  
    3. @Override  
    4. public void handleReturnValue(Object returnValue, MethodParameter returnType,  
    5. ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { 
    6.  // 调用selectHandler办法  
    7. HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);  
    8. if (handler == null) {  
    9. throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());  
    10.  
    11. handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest); // 应用找到的handler进行处理  
    12.  
    13. private HandlerMethodReturnValueHandler selectHandler(Object value, MethodParameter returnType) {  
    14. boolean isAsyncValue = isAsyncReturnValue(value, returnType);  
    15. // 遍历存在的HandlerMethodReturnValueHandler  
    16. for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) { 

        推荐阅读

        人工智能技术是基于大数据吃饭的?

      自负年夜 Google 的人工智能 AlphaGO 成为围棋界的百胜将近开端,AI(Artificial Intelligence,人工智能)这两个英文字,刹那间成为科技业最热点的关键字之一。而就在2017岁首?年代,早在>>>详细阅读


      本文标题:记录自己理解的一些设计模式

      地址:http://www.17bianji.com/lsqh/34663.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)