moco代码赏析十一

今天来看一下2012.11.7的后三次提交,这三次提交做的事情是比较统一的:用RequestExtractor、ContentRequestExtractor、XPathRequestExtractor、HeaderRequestExtractor、UriRequestExtractor来替代了ContentMatcher、HeaderRequestMatcher、XPathRequestMatcher、Header、XPath。

新加入了一个接口:RequestExtractor。

    public interface RequestExtractor {
        String extract(HttpRequest request);
    }

ContentRequestExtractor、XPathRequestExtractor、HeaderRequestExtractor实现了这个接口,重写了extractor()方法。这个方法的作用就是从请求中提取出xpath、header或者stream,表达会更加准确。再由以上三种extractor生成EqRequestMatcher对象,从这一步和以前的实现方式是统一的,所以作者无需改动测试类的调用方法。这也是这份代码写的好的地方之一,一直在遵循一个原则,把接口的方法与内部方法隔离开,耦合很低,所以当内部扩展时,并不会改变外部的调用。

    public class EqRequestMatcher implements RequestMatcher {
        private RequestExtractor extractor;
        private String expected;
    
        public EqRequestMatcher(RequestExtractor extractor, String expected) {
            this.extractor = extractor;
            this.expected = expected;
        }
    
        @Override
        public boolean match(HttpRequest request) {
            return this.expected.equals(extractor.extract(request));
        }
    }

之所以把这几个类由matcher转变成extractor,就是因为这几个extractor的作用和and/or、get/post、EqRequestMatcher起到的作用不同,他们不应该在同一层中出现。不过这次改动也把之前几个matcher的组合模式变成了类组合模式,并不严格遵守组合模式。设计模式也是为了解耦合,易扩展,可读性强,如果有其他更好的方式实现,何乐而不为呢?不应该为了使用设计模式而使用设计模式,本末倒置。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,161评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,457评论 25 709
  • 美,是指能引起人们美感的客观事物的一种共同的本质属性。 如何让别人感受你的美?把美变成一种生活方式。 ① 美在行为...
    豆子121阅读 3,945评论 6 3
  • 想起有环岛的计划还是我本来说要准备骑京杭大运河线的,和我一块骑川藏线的哥几个说道“大冬天毕竟是冷,不如环海南岛来的...
    叫了一整个夏天的蝉阅读 2,910评论 0 0
  • 华风天依阅读 2,435评论 0 0

友情链接更多精彩内容