如果现在有一台使用12V直流电的笔记本电脑,要将插头接到220V的交流电电源,直接接到电源我想笔记本要报销了。你需要用到一个交流电适配器(AC Adapter)。交流电适配器能够将家用的220V交流电转换成我们需要的12V直流电。适配器的功能就是介入原有电源和需要的电源之间,作为沟通的桥梁。适配器的原文是adapter,代表"适合"的意思。
在程序设计中我们也需要用到“适配器”,如果原有的内容无法直接利用时,通常要转换成必要的类型后再使用,实现转换功能的就是
Adapter Pattern
Adapter Pattern分为两种情况:
下面的程序使用类的Adapter Pattern输出字符串"$Hello$"和"*Hello*"
程序示例1
1.Print接口,可以看成我们需要的内容
package com.pattern.adapter; public interface Print { public abstract void printWeak(); public abstract void printStrong(); }
2.原有的内容
package com.pattern.adapter; 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+"*"); } }
3.适配器,将原有的内容转换成我们需要的
package com.pattern.adapter; /** * 适配器类 * @author administrator */ public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { //调用父类的构造函数 super(string); } //输出减弱的字符串 public void printStrong() { showWithParen(); } //输出加强的字符串 public void printWeak() { showWithAster(); } }
4.测试类
package com.pattern.adapter; public class Main { public static void main(String[] args) { Print p =new PrintBanner("Hello"); //输出减弱字符 p.printWeak(); //输出加强字符 p.printStrong(); } }
从Main类的源代码中完全看不出有Banner类,showWithParen(),showWtihAster()方法,好象只有人给笔记本电脑提供12V直流电,根据不知道它的原形(Adapter适配器的另一端)竟然是220V的交流电!
下面的代码采用对象的委托实现程序示例1的功能
程序救命2:
1.注意这里的Print不再是接口,而是抽象类
package com.pattern.adapter; public abstract Print { public abstract void printWeak(); public abstract void printStrong(); }
2.适配器,采用对象委托模式
package com.pattern.adapter; /** * 适配器类 * @author administrator */ public class PrintBanner extends Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } //输出减弱的字符串 public void printStrong() { banner.showWithParen(); } //输出加强的字符串 public void printWeak() { banner.showWithAster(); } }
测试类同上
设计思想:
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。