关于设计模式:7-设计模式适配器模式

5次阅读

共计 1142 个字符,预计需要花费 3 分钟才能阅读完成。

生存中的例子

如上图所示,生存中适配器无处不在,如电源适配器,读卡器,甚至多转接头读卡器等,都是很常见的例子,它们的目标都是将本来不能一起工作的部件可能在一起工作。
在软件工程畛域的适配器也是同样相似的作用。

定义

适配器模式是将一个类的接口转换成客户心愿的另外一个接口,行将本来因为接口不兼容而不能一起工作的那些类能够一起工作。

示例

这里就以一个简略的读卡器的例子来加以阐明。通常在咱们应用 SD 卡存储文件时,会存在如下状况:

  1. 电脑只有 USB 接口,不能直接插入 SD 卡;
  2. 电脑和 SD 卡都是成型的产品,不可能革新电脑或者读卡器。

因而,咱们须要在两头实现一个转换器,也就是读卡器。具体关系图如下:

不难发现,电脑 (Computer) 和读卡器 (SdReader) 都实现了 USB 接口(IUsb),而读卡器又聚合了 SD 卡,也就是 SD 卡随时能够插到读卡器上。具体实现代码如下:

public interface IUsb
{void Request();
}

public class Sd
{public void ReadWrite()
    {Console.WriteLine("存取数据");
    }
}

public class Computer
{
    private IUsb _usb;

    public void SetUsb(IUsb usb)
    {_usb = usb;}

    public void ConnectUsb()
    {if (_usb != null)
        {_usb.Request();
        }
    }
}

public class SdReader : IUsb
{
    private Sd _sd;

    public SdReader(Sd sd)
    {_sd = sd;}

    public void Request()
    {_sd.ReadWrite();
    }
}

其中,USB 接口 (IUsb)、电脑(Computer) 还有 SD 卡 (Sd) 都是不可变,而读卡器 (SdReader) 的目标就是为了让 SD 卡 (Sd) 可能适配 USB 接口 (IUsb) 而额定减少的局部。

UML 类图

将上述类图进行简略的形象就能够失去如下 UML 类图,,这就是适配器模式:

  • Target:指标接口,咱们冀望的接口
  • Adapter:适配器,将被适配者转换成咱们冀望的模式
  • Adaptee: 被适配者,原有的接口

优缺点

长处

  1. 能够让任何两个没有关联的类一起运行。
  2. 进步了类的复用。
  3. 通过引入一个适配器类来重用现有的类,而无须批改原有构造,恪守了开闭准则

毛病

过多地应用适配器,会让零碎十分零乱,不易整体进行把握。

总结

适配器模式尽管能够让任何两个没有关联的类一起运行,然而却属于弥补机制,专门用来在零碎前期扩大、批改时应用,属于无可奈何的做法。因而,适配器模式也不宜适度应用,如果能够的话,咱们应该优先通过重构解决,即让被适配的两个类一开始就能够一起工作或者会更好。

源码链接
更多内容,欢送关注公众号:

正文完
 0