美文网首页
[100]技术-适配器模式

[100]技术-适配器模式

作者: shawnxjf | 来源:发表于2017-12-27 20:48 被阅读0次

    什么是适配器模式

    现有接口 iA,iB的情况下,我们希望在不修改已有代码的情况下iA可以使用iB的接口。根据开放封闭原则,我们可以立马想到增加一个类使iA兼有iB接口的功能。这就是适配器接口的由来,其定义可以为:Adapter pattern works as a bridge between two incompatible interfaces.

    如何写适配器

    适配器是在已有两个不兼容的接口的背景下,以开放封闭原则来编码代码形成的一种规范。
    我们举一个场景,其现有代码:

    iA
    {
       doA();
    }
    iB{
        doB();
    }
    main()
    {
      iA a = new Aimpl(); 
      a.doA(); 
    }
    

    我们希望在main(){}方法中,a.doA()具有iB.doB()接口的功能。由此我们想到了wrapper 对象把A包装起来。

    AdapterToB implement iA  //至于AdapterToB需不需要实现iB接口不重要,不是适配器模式所规范的
    {  
          iB b;
          public void  doA()
          {
                 b.doB();
          }
    }
    //我们只需要添加一个类:AdapterToB 在调用的时候把对象实例替换掉就可以,具体场景中也许A对象实例是通过spring注入的,此时只需要修改配置文件即可。
    main()
    {
        iA a = new AdatperToB(); 
        a.doA(); 
    }
    

    适配器与代理模式区别

    谈到代理模式与适配器的区别,我们先简单回顾下代理模式是什么样的。

    public  ProxyA implement A  //运用代理后客户端访问接口不变所以需要继承相同的接口。
    {
        RealA a;
        public void do()
       {
            //create A if a is not create
           //dosomething.....
           a.do();
       }
    }
    

    看了上面简单描述我们知道代理模式描述的是A与proxyA的关系,比如A是一个远程调用我需要代理起来可以额外空盒子。
    而适配器模式描述的是解决 iA,iB之间的关系,设计到 iA,iB,AdapterToB三个类之间的关系。

    说在后面的话

    1.学习东西要带入场景,比如适配器模式是已有iA,iB两个接口的情况下,如何使其兼容。
    2.如果只有一个接口iA, 你想替换到iA的接口iA实现类不多或者已有的实现不用了,那么直接在iA实现类上修改即可。
    比如:

    Aimpl1 implement iA
    {
       doA()
       {
             XXXXXX Aimpl1 doA
       }
    }
    

    3.又比如iA有很多的实现比如Aimp1,Aimpl2,Aimpl3,且代码中大量引用Aimpl1,Aimpl2,Aimpl3对象。
    如果你在新的场景下需要iA接口具有新的功能,又不想修改iA接口(很多原因,比如iA是别的团队提供的),那么可以使用适配器模式。
    然后在新的场景下使用适配器类。

    //新的场景
        iA a = new AdatperToB(); 
        a.doA(); 
    

    相关文章

      网友评论

          本文标题:[100]技术-适配器模式

          本文链接:https://www.haomeiwen.com/subject/uohpgxtx.html