设计模式(12)-适配器模式详解(易懂)

适配器模式的定义

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配容许一般由于接口不兼容而不能在一块儿工做的类工做在一块儿,作法是将类本身的接口包裹在一个已存在的类中。
共有两类适配器模式:编程

对象适配器模式设计模式

  • 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种状况下,适 配器调用被包裹对象的物理实体。

类适配器模式微信

  • -- 这种适配器模式下,适配器继承自已实现的类。

模型:iphone

  • Target:目标角色,定义把其余类转换为咱们指望的角色
  • Adaptee:初始角色,即咱们原始的类和接口对象,如“A->B”,其中 A就是初始角色,它是一直存在的
  • Adapter:适配器角色,也就是咱们今天的重点,适配器须要新建立,经过继承等方式把初始角色转换成为目标角色。

代码演示(类适配器模式):ide

1.AbstractTarget:抽象目标角色函数

public interface AbstractTarget {
    //抽象目标角色方法
    public void target();
}

2.具体的目标角色spa

public class Target implements AbstractTarget {
    @Override
    public void target() {
        Log.d("qzs","实现目标方法");
    }
}

3.初始角色Adaptee:设计

public class Adaptee {
    //初始的方法
    public void adaptee(){
        Log.d("qzs","初始的逻辑");
    }
}

4.适配器角色:code

public class Adapter extends Adaptee implements AbstractTarget {
    @Override
    public void target() {
       adaptee();
    }
}

5.调用对象

AbstractTarget tr=new Adapter();      
   tr.target();

实例说明

例如,我手中有Android数据线和iphone手机,我想用安卓数据线给iphone手机充电。此时:

  • 初始角色:Android数据线
  • 目标角色:iphone手机
  • 适配器:数据线转换器

代码演示:

1.Android数据线:

public class AndroidLine {
    public  void  charge(){
        Log.d("qzs","Android数据线给Android手机充电");
    }
}

2.目标角色:

public interface AbstractIphone {
    public  void  target();
}

3.数据线转换器

public class PhoneLineAdapter extends AndroidLine implements  AbstractIphone {
    @Override
    public void target() {
        super.charge();
        Log.d("qzs","可是我能够经过数据线转换器来给iphone手机充电");
    }
}

4.调用

AbstractIphone tr1=new PhoneLineAdapter();
        tr1.target();

运行:


适配器模式的优势及其余

1.优势

  • 灵活性好
  • 经过适配器可让两个没有关系的类一块儿运行
  • 增长了类的通透性

2.注意:

当初始角色的接口和实现类为多个时,咱们在写适配器不能用继承的方式。能够经过在适配器中构造函数的方法来传递对象从而实现数据处理,也就是对象适配器模式。

文章参考了网上信息以及《设计模式之禅》


另外能够加入个人Android技术交流群:458739310
你们能够关注个人微信公众号:「安卓干货铺」一个有质量、有态度的公众号!

相关文章
相关标签/搜索