概述

适配器模式 : 将一个类的接口转换为客户希望的另一个接口. 适配器模式让那些接口不兼容的的类可以在一起工作. Adapter模式也称为Wrapper模式( Adapter Pattern : Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces )

/** * 功能描述:充当Adapterns角色 * * @author lihao * @create 2019-11-01 21:25 */ public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("{" +string +"}"); } public void showWithAster() { System.out.println("*" + string + "*"); } }

Print接口 : 充当Target角色

/**
 * 功能描述:充当Target角色
 *
 * @author lihao
 * @create 2019-11-01 21:27
 */
public interface Print {
    public abstract void printWeak();
    public abstract void printString();
}

PrintBanner类 : 充当Adapter角色

/**
 * 功能描述:充当Adapter角色
 *
 * @author lihao
 * @create 2019-11-01 21:30
 */
public class PrintBanner extends Banner implements Print{
    public PrintBanner(String string) {
        super(string);
    }


    @Override
    public void printWeak() {
        showWithParen();
    }

    @Override
    public void printString() {
        showWithAster();
    }
}

Main类 : 充当Client角色

/**
 * 功能描述:充当Client角色
 *
 * @author lihao
 * @create 2019-11-01 21:31
 */
public class Main {
    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printString();
    }
}

程序运行结果:

{Hello}
*Hello*

示例UML图

适配器模式示例图

Adapter模式中登场的角色

  • Target(目标抽象类) : 目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类. 在类适配器中,由于Java语言不支持多重继承,所以它只能是接口
  • Client(请求者):该角色负责使用 Target 角色所定义的方法进行具体的处理
  • Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对 Adaptee 和 Target 进行适配。适配器Adapter 是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee来使两者产生联系,在对象适配器中,它通过继承Target并关联一个Adapter对象来使两者产生联系
  • Adaptee(适配者类):适配者既被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,其包含着客户希望使用的业务方法。