适配器模式,又称包装器(wrapper)模式,顾名思义,就是将类进行包装,然后适应新的需求,书中举的例子比较恰当,就是用电脑的电源转换器来举例子,书中举得例子是打印的例子:
1,target:
要实现的目标,就是电源能够正常的工作
2,adapter
转换器,将220V的电压转换为10v可工作的电压
3,current
现状,220v电压
实现的思路有两个,一个是继承,另外一个是委托
先说第一种方法,继承:
思路:adapter要继承current类,这样才可以获取当前的方法,同时,要实现target接口,这样我们可以通过新建一个用adapter实现target的接口。
代码如下
target
package ModelAdapter; public interface Printer { public abstract void printWeak(String str); public abstract void printBold(String str); }
adapter
package ModelAdapter; public class PrintBaner extends Baner implements Printer{ public void printWeak(String str) { showWeak(str); } public void printBold(String str) { showBold(str); } }
current
package ModelAdapter; public class Baner { public void showWeak(String str){ System.out.println("("+str+")"); } public void showBold(String str){ System.out.println("******"+str+"**********"); } }
测试方法main类
package ModelAdapter; public class Main { public static void main(String[] args) { Printer p = new PrintBaner(); p.printBold("hello, world"); p.printWeak("who are you?"); } }
这里采用的是新建的接口为adapter实现的接口,这样实际调用的方法就是适配器的方法
第二种方案就是使用委托
什么是委托呢?顾名思义,就是根据将操作委托给别人来实行,这里,就是将target的操作委托给current进行操作,具体的如下
此时的adapter就是一个委托,具体的代码如下
package ModelAdapter; public class PrintDelegete implements Printer { private Baner baner; public void printWeak(String str) { baner.showWeak(str); } public void printBold(String str) { baner.showBold(str); } }
上面就是适配器模式。