什么是适配器模式
将一个接口变换成客户期待的另一个的接口,从而使原本因接口不匹配无法一起工作的两个类能够一起工作。
生活中不乏这样的案例,如电脑的电源适配器,它的作用主要是解决家用电和电脑之间的兼容问题
通过适配器模式可以解决‘现有程序’和‘所需程序’之间的差异,让现有程序和所需程序能够完美的兼容。
如何做一个将”交流100伏特电压”转换成“直流12伏特电压”的适配器
适配器模式的两种实现
继承适配器模式
1 2 3 4 5 6 7 8 9 10 11 12
| public class Banner{ private String string;
public void showWithParen(){ System.out.println(""); }
public void showWithAster(){ System.out.println(""); } }
|
1 2 3 4 5 6
| public interface Print{
public abstract void printWeak(); public abstract void printStrong(); }
|
1 2 3 4 5 6 7 8 9 10 11
| public class PrintBanner extends Banner implements Print{
public void printWeak(){ showWithParen(); }
public void printStrong(){ showWithAster(); } }
|
调用方法
1 2 3
| Print p = new PringBanner("hello"); p.pritWeak(); p.printStrong();
|
好处
- 面向接口编程,客户端代码只需要通过Print接口进行调用,隐藏了方法实现。(连接笔记本电脑的12伏特电压就有可能是由100伏特交流电压通过适配器转换而成的)
委托适配器模式
通过委托来实现适配器
- 适配器(PrintBanner)通过调用现有需求的方法(Print)来间接调用以前的的功能(Banner)
- Banner通过委托的形式传入到适配器(PrintBanner)中,现有功能(Print)作为抽象类被适配器继承。
Talk is cheap, show me the code
1 2 3 4 5
| publc abstract class Print{ public abstract void printWeak(); public abstract void printStrong(); }
|
1 2 3 4 5 6 7 8 9 10 11 12
| public class PrintBanner extends Print{ private Banner banner;
public void printWeak(){ banner.shouwWithParen(); }
public void printStrong(){ banner.showWithAster(); } }
|