前言

适配器模式是比较常见的,Android开发中也是比较常用的。记录一下相关知识,方便自己后续查阅和回顾。

正文

适配器模式

适配器模式是一种结构型设计模式,用于将一种接口转换为客户端期望的另一个接口,使得原本因接口不兼容而无法一起工作的类可以协同工作。

适配器为中间者,连接着两个互不相容的接口,从而实现接口的适配。

核心思想:在不改变现有代码的情况下,将一个类的接口转换为客户端期望的接口。

作用

接口转换,将原有的接口(或方法)转换成另一个接口进行适配。

优缺点

优点
  1. 提高类的复用

  2. 灵活性好,不会破坏原有的接口

  3. 转换接口,可以让两个没关联的类一起运行

缺点
  1. 若过度适配,可能造成代码结构混乱

主要角色

  1. 目标接口(Target):定义客户端使用的相关接口

  2. 适配者类(Adaptee):一个已经存在的类,但与目标接口存在不兼容的,需要适配

  3. 适配器类(Adapter):通过包装适配者类对象,把接口转换成目标接口。

实现方式

类适配器

基于继承。

通过继承需要适配的类,并实现目标接口。(多用于单继承语言,例如Java)

对象适配器

基于组合。

通过组合一个需要适配的类的实例,并实现目标接口。(推荐使用,灵活性更高)

demo

本案例为参考文3的,那篇文章写得不错,引用了,感谢。

场景为:插头适配器,你目前只有两孔插头的电源插座,但新买的冰箱为三孔插头,需要买一个适配器进行适配。

三孔插头是无法插入两孔的插座的,因此需要买一个适配器,然后进行转换为三孔的插座。

适配器有三个角色,那么上面的分为:

目标接口:两孔插座

适配器: ???

适配者类:三孔插头

目前就缺少一个适配器。

类图
类适配

基于继承的类适配的类图

设计模式之适配器模式

对象适配

基于组合的对象适配的类图

设计模式之适配器模式

代码片段

虽然适配器的实现分两种,一种是基于继承的的类适配,一种是基于组合的对象适配。

目标接口

两孔插座

public interface TwoPinPlug {
    void connect();
}
适配者

三孔插头接口

public interface ThreePinPlug {
    void connectWithThreePins();
}

三孔插头实现类

public class ThreePinPlugImpl implements ThreePinPlug{
    @Override
    public void connectWithThreePins() {
        Log.d(TAG, "connectWithThreePins: ");
    }
}
适配器

根据上面实现适配器分两种,类适配和对象适配。

  1. 类适配

//类适配是基于组合方式
public class PlugAdapter extends ThreePinPlugImpl implements TwoPinPlug {
    @Override
    public void connect() {
        // 转换三孔插头的接口为两孔插头接口
        super.connectWithThreePins(); 
    }
}

客户端调用

//使用类适配器
TwoPinPlug twoPinPlug = new PlugAdapter();
twoPinPlug.connect();
  1. 对象适配

public class PlugAdapter2 implements TwoPinPlug {
    private final ThreePinPlug threePinPlug;

    public PlugAdapter2(ThreePinPlug threePinPlug) {
        this.threePinPlug = threePinPlug;
    }

    @Override
    public void connect() {
        threePinPlug.connectWithThreePins();
    }
}

客户端调用

//使用对象适配器
TwoPinPlug twoPinPlug1 = new PlugAdapter2(new ThreePinPlugImpl());
twoPinPlug1.connect();

课外知识

BaseAdapter

基础数据适配器,它的主要用途是将一组数据传到例如ListView等UI显示组件,继承自接口类Adapter

SimpleAdapter

简单适配器,系统自定义了一些方法,可以重写这些方法。

ArrayAdapter

数据和UI一对一,传入数据源和布局文件,完成显示。

SimpleCursorAdapter

指向性适配器,指向数据库,可以方便地把数据库的内容以列表的形式展示出来。

参考文章

  1. 设计模式——Adapter(适配器)模式

  2. 设计模式-适配器模式-adapter pattern

  3. 掌握设计模式–适配器模式

  4. Android中常用的Adapter的种类和用法

 历史上的今天

  1. BitAuto
  2. 网通社汽车
  3. 车问网
  4. 车讯网
  5. 汽车消费网门户
  6. 拆车坊
  7. 中华网汽车
  8. 房车猫
  9. 17汽车网

相关文章

暂无评论

none
暂无评论...