CHARLIE SAYS

查理如是说
DATE 2026-08-24
THEME
SERIES / DESIGN_PATTERNS / P-103 · 设计模式

设计模式 009:适配器(Adapter)

意图

把一个类接口转换成另一个用户需要的接口。

类图

适配器模式分为对象适配器类适配器:对象适配器使用组合,类适配器使用多重继承(Java 中可通过实现接口 + 继承实现类模拟)。本文以下实现的是对象适配器。

classDiagram
    class Duck {
        <<interface>>
        +quack() void
    }
    class Turkey {
        <<interface>>
        +gobble() void
    }
    class WildTurkey {
        +gobble() void
    }
    class TurkeyAdapter {
        -turkey Turkey
        +quack() void
    }
    class Client
    Duck <|.. TurkeyAdapter
    Turkey <|.. WildTurkey
    TurkeyAdapter o-- Turkey : 组合被适配者
    Client ..> Duck

实现

鸭子(Duck)和火鸡(Turkey)拥有不同的叫声:Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子!

public interface Duck {
    void quack();
}

public interface Turkey {
    void gobble();
}

public class WildTurkey implements Turkey {
    @Override
    public void gobble() {
        System.out.println("gobble!");
    }
}
public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }
}
public class Client {
    public static void main(String[] args) {
        Turkey turkey = new WildTurkey();
        Duck duck = new TurkeyAdapter(turkey);
        duck.quack();
    }
}

JDK 中的应用

  • java.util.Arrays#asList()
  • java.util.Collections#list()
  • java.util.Collections#enumeration()
  • javax.xml.bind.annotation.adapters.XMLAdapter
  • Spring MVC 的 HandlerAdapter(根据处理器类型适配不同的调用方式)

系列导航

← 开源合规 009:能力成熟度模型集成认证 - CMMI 目录 软件工程 009:典型的中小团队开发流程详解 →
← 返回文章列表