在现有程序以及需求冲突的情况下,在两者之间加个适配器,让两者在适配器的协调下可以正常工作的模式叫适配器模式。
使用继承的适配器
/** * 表示现有的程序 * * Created by Administrator on 2018/5/25 0025. */ 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+"*"); } }
/** * 表示现在的需求 * * Created by Administrator on 2018/5/25 0025. */ public interface Print { public abstract void printWeak(); public abstract void printStrong(); }
/** * 扮演适配器角色 * * Created by Administrator on 2018/5/25 0025. */ public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); } //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。 @Override public void printWeak() { showWithParen(); } //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。 @Override public void printStrong() { showWithAster(); } }
使用委托的适配器
/** * 表示现在的实际情况 * * Created by Administrator on 2018/5/25 0025. */ 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+"*"); } }
/** * 表示现在的需求 * * Created by Administrator on 2018/5/25 0025. */ public interface Print { public abstract void printWeak(); public abstract void printStrong(); }
/** * 扮演适配器角色 * * Created by Administrator on 2018/5/25 0025. */ public class PrintBanner implements Print { private Banner banner; private String string; public PrintBanner(String string) { banner = new Banner(string); } //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。 @Override public void printWeak() { banner.showWithParen(); } //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。 @Override public void printStrong() { banner.showWithAster(); } }
//类适配器模式 Print print = new PrintBanner("hello"); print.printStrong(); print.printWeak();