适配器模式:
适配器模式 : 将一个类的接口转化成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起的那些类可以一起工作
通俗点来讲:比如有个二插插座,显然只有二插的充电器可以使用,但是三插充电器也想要使用这个插座怎么办呢?,那就重新做一个即可以满足二插的也满足三插的插座,这个新的插座就是java中的适配器
代码演示:
定义一个二插接口,三插接口
public interface PowerA { void work(); }
public interface PowerB { void work(); }
对应的两个实现类(二插充电器,三插充电器)
public class PowerAImpl implements PowerA { @Override public void work() { System.out.println("二插充电器开始工作"); } }
class PowerBImpl implements PowerB { @Override public void work() { System.out.println("三插充电器开始工作"); } }
写到这里,我们进行测试:
public class Test1 { public static void main(String[] args) { getWork(new PowerAImpl); } public static void getWork(PowerA power) { System.out.println("正在连接中..."); power.work(); System.out.println("工作结束"); } }
问题:
我们发现,写的这个方法只能传入二插的实现类,三插由于接口不兼容无法传递。
解决:
我们可以写一个适配器类,让它们都可以通过。
public class PowerAdapter implements PowerA { private PowerB powerB; public PowerAdapter(PowerB powerB) { this.powerB = powerB; } @Override public void work() { powerB.work(); } }
大功告成,最终测试
public class Test1 { public static void main(String[] args) { PowerA powerA = new PowerAImpl(); getWork(powerA); PowerB powerB = new PowerBImpl(); PowerA adapter = new PowerAdapter(powerB); getWork(adapter); } public static void getWork(PowerA power) { System.out.println("正在连接中..."); power.work(); System.out.println("工作结束"); } }