适配器模式

一、简介

适配器模式(Adapter Pattern) 属于结构型模式中的一种,主的目的是兼容性,将某个类的接口转换成客户端期望的另一个接口表示,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。适配器分为两种:类适配器模式、对象适配器模式。

 

二、对象适配器模式

UML 图

 

 

Target: 目标接口。

Adapter:适配器实现目标接口。

Adaptee:被是适配器,所有的请求都委托给被适配者。

 

案例

1、 定义两个接口,与实现类

// 接口
public interface Duck {
​
    void duck();
​
    void fly();
}
​
// 实现类
public class ADuck implements Duck {
    @Override
    public void duck() {
        System.out.println("ga ga ga ga....");
    }
​
    @Override
    public void fly() {
        System.out.println("fly");
    }
}
// 接口 public interface Turkey { ​ void gobble(); ​ void fly(); } ​ // 实现类 public class ATurkey implements Turkey { @Override public void gobble() { System.out.println("gobble"); } ​ @Override public void fly() { System.out.println("fly short"); } }

2、我们想将ADuck 类的接口,转换成客户期望的另一个接口。需要构建一个适配器

public class TurkeyAdapter implements Duck  {
​
    Turkey turkey;
​
    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }
​
    @Override
    public void duck() {
        turkey.gobble();
    }
​
    @Override
    public void fly() {
        turkey.fly();
    }
}

3、 模拟一个客户端

public class ClientTest {
​
    static void testDuck(Duck duck){
        duck.duck();
        duck.fly();
    }
​
    public static void main(String[] args) {
        ATurkey aTurkey = new ATurkey();
        TurkeyAdapter adapter = new TurkeyAdapter(aTurkey);
        adapter.duck();
        adapter.fly();
​
        testDuck(new ADuck());
        testDuck(adapter);
    }
}

总结:

  Adapter 模式最大的作用还是将原本不兼容的接口融合在一起工作。

 

三、类适配器模式

UML图

不同于对象适配器,类适配是通过多重继承来实现(Java不支持多继承)。

Client:客户认为他在和Target(鸭子)沟通;

Target:目标是鸭子类,是客户在其上调用方法的类;

Adaptee:火鸡类没有鸭子的方法,但是适配器可以对鸭子的方法进行调用,转接到调用火鸡的方法;

Adapter:通过扩展两个类,适配器使得火鸡可以响应鸭子的请求;

posted on 2020-08-26 09:53  愚蠢的猴子  阅读(286)  评论(0编辑  收藏  举报