概述
适配器模式 : 将一个类的接口转换为客户希望的另一个接口. 适配器模式让那些接口不兼容的的类可以在一起工作. 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(适配者类):适配者既被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,其包含着客户希望使用的业务方法。