使用Adapter模式可以在完全不改变原有代码的前提下使现有代码适配于新的接口API。
Adapter模式有以下两种方式:
类适配器模式(使用继承方式的适配器)
对象适配器模式(使用委托的适配器)
Adapter涉及到的角色
Target对象:该角色定义了所需的方法(Print接口)
Client请求者:该角色负责使用Target角色定义的方法进行具体处理(相当于main方法)
Adaptee被适配:是一个持有既定方法的角色。(Banner类)
Adapter适配:使用Adaptee角色来满足Target的需求(PrintBanner类)
类适配器模式:
public interface Print { public abstract void pringWeak(); public abstract void printStrong(); }
public class Banner { private String string; public Banner(String string) { this.string= string; } public void showWithParam() { System.out.println("{"+string+"}"); } public void showWithAster() { System.out.println("*"+string+"*"); } }
public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); } @Override public void pringWeak() { showWithAster(); } @Override public void printStrong() { showWithParam(); } }
public class Main { public static void main(String[] args) { Print printBanner = new PrintBanner("adapter"); printBanner.pringWeak(); printBanner.printStrong();; } }
对象适配器模式:(对PrintBanner类进行修改)
public class PrintBanner implements Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } @Override public void pringWeak() { banner.showWithAster(); } @Override public void printStrong() { banner.showWithParam(); } }
什么时候使用Adapter模式:
对已有接口进行扩展时,例如service层返回的接口包括的数据结果在新的controller中可使用,那么直接复用原有的service层接口,直接使用,复用代码减少出错的几率。