• 本文已参与「新人创造礼」活动,一同开启创造之路。

前语

适配器形式(Adapter Pattern):是作为两个不兼容的接口之间的桥梁。这种类型的规划形式属于结构型形式,它能使接口不兼容的目标能够相互合作。

什么时候运用适配器形式

在运用一个现已存在的类,可是假如他的接口完成的办法不满足你的要求不一同,就能够运用适配器形式。其实站在软件规划的角度,在开发前期应该考虑好,而不是一开始就运用适配器形式来完成,这样是不合理的。

适配器形式往往存在于软件开发后期两个不兼容接口,而且不易修改,能够运用适配器形式来处理。

事务实例

还记得咱们早些时候运用的圆孔耳机(即TSR接口耳机)吗?因为手机迭代更新很快现在许多的手机都运用了Type-C接口,一个孔就处理了耳机、供电接口,那我收藏的圆孔接口耳机需要如何运用呢?

现在市场上呈现了许多的Type-C转,完美的处理了我闲置耳机,在这儿的Type-C转在这儿扮演的便是适配器的角色!

设计模式之 - 适配器模式(结构型模式)

适配器形式结构

  • 类适配器

类适配器的完成方式主要是继承,一同继承接口和复用类。

  • 目标适配器

适配器完成了其中一个目标的接口,并对另一个目标进行封装。

类适配器完成

  • 新增耳机接口完成播映类
public interface IHeadset
{
    void Play();
}
  • 新增 TsrHeadset 类完成Tsr接口播映,该类与耳机接口不兼容
public class TsrHeadset
{
    public void TsrPlay() 
    {
        Console.WriteLine("运用Tsr接口耳机播映");
    }
}
  • 新增兼容类 TypeCAdapter 使其继承IHeadset,TsrHeadset,完成Play办法
public class TypeCAdapter : TsrHeadset, IHeadset
{
    public void Play()
    {
        base.TsrPlay();// 在TypeCAdapter类调用TsrPlay完成接口适配
    }
}
  • 履行结果

设计模式之 - 适配器模式(结构型模式)

假如运用了笼统类,那就意味着多继承,其实在C#、Java等面向目标编程言语,是不支持的,此刻咱们能够运用目标适配器来完成!

目标适配器完成

在上面代码做了部分优化,完成如下

static void Main(string[] args)
{
    TypeCAdapter adapter = new TypeCAdapter();
    adapter.Play();
    Console.ReadLine();
}
//Tsr耳机类有TsrPlay播映办法
public class TsrHeadset 
{
    public void TsrPlay() 
    {
        Console.WriteLine("运用Tsr接口耳机播映");
    }
}
// 笼统耳机类
public abstract class Headset 
{
    public abstract void Play();
}
//TypeC适配器
public class TypeCAdapter : Headset
{
    private TsrHeadset TsrHeadset = new TsrHeadset();
    public override void Play()
    {
        TsrHeadset.TsrPlay();
    }
}

总结

只需客户端代码通过客户端接口与适配器进行交互,你就能在不修改现有客户端代码的情况下在程序中增加新类型的适配器,这无疑是适配器形式长处,当然长处还有它能够让任何两个没有相关的类一同运转,提高了类的复用性,可是假如在体系中过多的运用适配器形式,会使体系变得反常杂乱,而且不易于把握,如上述在客户端调用的是接口A其实内部调用的是B,会使体系变得很乱,因而假如不是很有必要,能够不运用适配器,而是直接对体系进行重构