目录
Adapter即适配器,可以类比为将220V的电压的电源转为5V电压的手机充电器,起转换的作用。
明确概念:
Adaptee:被适配者,即220v电压的电源
Adapter:适配器,即手机充电器
Target:适配目标,即输出5V电压
Client:请求适配者,即手机- Adapter模式有两种实现:
- 使用继承的适配器。
类图
代码
//Adaptee 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 + "*"); } } //Target public interface Print { public abstract void printWeak(); public abstract void printStrong(); } //Adapter public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); } @Override public void printWeak() { showWithParen(); } @Override public void printStrong() { showWithAster(); } } //Client public static void main(String[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); }
- 使用委托的适配器。
类图
代码
//Adaptee 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 + "*"); } } //Target public abstract class Print { public abstract void printWeak(); public abstract void printStrong(); } //Adapter public class PrintBanner extends Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } public void printWeak() { banner.showWithParen(); } public void printStrong() { banner.showWithAster(); } } //Client public static void main(String[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); }
两种实现方式的区别
Adapter根据不同的Target类型分别进行实现。如果Target是接口,那Adapter就继承Adaptee,使用Adaptee的方法实现Target的方法。如果Target是抽象类,那Adapter就在自己内部创建Adaptee对象,继承Target类,调用Adaptee对象的方法实现Target类的方法。为什么使用这种模式
很多时候,我们不是从零开始编程的,要尽量复用现有的经过充分测试的类。此时使用Adapter模式对这个类进行适配,借用这个类的已有方法开发新功能,减轻测试负担。
还有更多的应用场景,比如提高与旧版本的兼容性。但我现在还不能完全理解。
来源:https://www.cnblogs.com/qianbixin/p/10992678.html