zoukankan      html  css  js  c++  java
  • 【设计模式】继承适配模式

    问题:

      曾经遇到一个设计模式的问题:spring里面的HandlerInterceptor有个实现类是HandlerInterceptorAdaptor,这个类的名字是以adaptor结尾的,但是实际就是HandlerInterceptor接口做了几个基本的实现,为什么不叫做AbstractHandlerInterceptor?HandlerInterceptorAdaptor这个名字明显就是代表适配器模式,但是实际又不是,我发现spring好多这种带adapter结尾的

    分析:

      其实不仅仅是Spring,而且很多开源框架如Netty都有很多Adaptor结尾的类,通常我们可以发现的是,有Adaptor类的方法均是提供了所有默认的简单实现,而以Abstract开头的抽象类必然开放了abstract方法出去;

      那么这些Adapter类是做成抽象类,但是又提供了所有的实现,没有开放接口出去,但也不能实例化,那怎么用呢?所以使用者必然要继承它,而且要实现拦截又要重写你需要的方法,这就要求实现者对拦截器的上层结构是非常了解的,但很可能实现者并不想把它实现的类的职责赋予任何和“拦截器”这种侵入性的类型,可能实现者眼里做的只是一个权限验证类,并不想管框架的逻辑,但又要被框架所理解和调用,怎么解决这种矛盾呢?适配这种思想就来了,通过适配表面我适配了框架,但我又可以完全脱离框架,因为就算去除重写的方法,我的类命名含义也丝毫不受影响。

      所以这可以看的出,用Adapter结尾是设计者希望对接者对高层比较了解,而进行自行适配的一种模型,这可以使得继承类的方法命名非常符合自描述性,是一种整洁代码的机制;为什么是整洁代码呢?如果深入了解过《重构》和《代码整洁之道》的朋友估计就很清楚,一个类的命名是多么的重要;代码的艺术,是从有Sense开始的;

    结论:

      整洁代码的继承适配模式

  • 相关阅读:
    个人理解闭包
    个人理解回调
    在网站中设置一个分享到功能
    在lua中从一个字符串中移除空间源码
    成都实行积分落户
    unity3D客户端框架
    skynet对Windows环境支持的版本:Windows版skynet
    超期羁押
    资料
    媒体电话
  • 原文地址:https://www.cnblogs.com/iCanhua/p/10941493.html
Copyright © 2011-2022 走看看