[100]技术-适配器模式

什么是适配器模式

现有接口 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]技术-适配器模式)