[设计模式]适配器模式

1.适配器模式用来做什么?

  适配器模式就是为了解决当前客户需要某个格式的接口,而现有系统中并没有可以直接提供的接口,就例如美国的电器拿到中国来是不能直接使用的,需要使用电源适配器,再比如内存卡是不能直接插在电脑上读取的,而是需要通过一个读卡器连接电脑和内存卡,这就是适配器的存在模式。

  适配器就是为了解决现有接口和需求接口不匹配的模式,在现有接口中做一层适配,使得满足需求,对于现有代码可以直接复用或者比较少修改即可使用。

  

  图1 适配器的作用

 

2.怎么实现适配器模式?

  适配器的实现方式有两种方式:类适配器、对象适配器

  类适配器是通过继承的方式,继承现有的类,然后实现需要的新的接口,类图如下:

    

      图2 通过继承的方式实现类适配器

这种方式的代码实现如下:

public class NowClass {
    
    public void powerA () {
        // do powerA
    }

    public void powerB () {
        // do powerB
    }
}

public interface WantClass {
    public void doublePowerA ();

}

public class Adapter extends NowClass implements WantClass{

    public void doublePowerA() {
        powerA();
        powerA();
    }
}

  通过这种方式显示了不改动原有代码的情况下,满足了新的系统需求接口。

  对象适配器是通过组合的方式实现适配,适配器持有原有对象的引用,通过用调用对象的方法来实现适配;具体类图如下:

  

    图3 通过组合的方式实现适配器模式

   具体的代码实现如下:  

public class NowClass {
    
    public void powerA () {
        // do powerA
    }

    public void powerB () {
        // do powerB
    }
}

public interface WantClass {
    public void doublePowerA ();

}

public class Adapter implements WantClass{

    private NowClass nowClass;

    public Adapter (NowClass nowClass) {
        this.nowClass = nowClass;
    }

    public void doublePowerA() {
        nowClass.powerA();
        nowClass.powerA();
    }
}

这就是适配器的两种方式。 

3. 适配器模式定义

  将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

4. 适配器模式使用场景(引自菜鸟教程:http://www.runoob.com/design-pattern/adapter-pattern.html)

  1、系统需要使用现有的类,而此类的接口不符合系统的需要。

  2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

  3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

 

关于适配器模式文章推荐:

  设计模式(二) 三种适配器模式 总结和使用场景 https://blog.csdn.net/zxt0601/article/details/52848004

  适配器模式 | 菜鸟教程 http://www.runoob.com/design-pattern/adapter-pattern.html

  Java设计模式之《适配器模式》及应用场景 https://www.cnblogs.com/V1haoge/p/6479118.html

posted @ 2018-08-08 00:54  一年z  阅读(172)  评论(0编辑  收藏  举报