1.通过继承的方式
2.通过组合的方式
package adapter; /** * Print是客户需要使用的接口 */ public interface Print { public void printWeak(); public void printStrong(); }
package adapter; /** * Banner是原始的接口 */ 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+"*"); } }
package adapter; /** * PrintBanner是适配器,将Banner适配为Print * 此种方式是运用继承的方式实现的适配器 */ public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); } @Override public void printWeak() { showWithParen(); } @Override public void printStrong() { showWithAster(); } }
package adapter; /** * 该种方式是使用委托(组合)的方式实现适配器 * */ public class PrintBanner2 implements Print{ private Banner banner; public PrintBanner2(Banner banner){ this.banner = banner; } @Override public void printWeak() { banner.showWithParen(); } @Override public void printStrong() { banner.showWithAster(); } }
package adapter; /** * 伟大的客户 */ public class Client { public static void main(String[] args) { Print print = new PrintBanner("hello adapter model of inherit"); print.printStrong(); print.printWeak(); Print print2 = new PrintBanner2(new Banner("hello adapter model of combination")); print2.printStrong(); print.printWeak(); } }
运行结果:
*hello adapter model of inherit* (hello adapter model of inherit) *hello adapter model of combination* (hello adapter model of inherit)