说到适配器,我们可能会想到电脑的适配器,没错,其实作用是一样的,电脑的适配器在中国可以使用,在美国也可以使用,它的主要作用是在新接口和老接口之间进行适配。。这就是一个适配的过程,适配器模式的类图如下:
这个类图是我在其他的地方截到的,我以前觉的类图特别不好看,慢慢接触之后发现类图和流程图都特别有意义,一看就特别的清晰。整个流程就是通过Adapter把Adaptee转换为目标(Target)的子类。既然已经知道原理了,那下面开始码代码吧。我来举例一个场景吧,经常需要使用到投影仪,但是有一些人的电脑并不支持投影仪的大口,只能使用适配器了。那就是可以把小口转换为大口。
package com.roc.adapter; /** * 投影仪支持的大口 * @author liaowp * */ public interface BigPort { public void userBigPort();//使用的大口 }
package com.roc.adapter; /** * 电脑的小口 * @author liaowp * */ public interface SmallPort { public void userSmallPort();//使用小口 }
package com.roc.adapter; /** * 适配器模式 * @author liaowp * */ public class SmallToBig implements BigPort{ private SmallPort smallPort;//小口 public SmallToBig(SmallPort smallPort){//获得小口 this.smallPort=smallPort; } public void userBigPort() { this.smallPort.userSmallPort(); //使用小口 } }
package com.roc.adapter; /** * 客户端 * @author liaowp * */ public class Client { public static void main(String[] args) { SmallPort smallPort = new SmallPort() {//电脑自带小口 public void userSmallPort() { System.out.println("使用的是电脑小口"); } }; //需要一个大口才可以投影,小口转换为大口 BigPort bigPort=new SmallToBig(smallPort); bigPort.userBigPort();//电脑小口工作中 实现了适配 } }
下面说一下适配器的优缺点:
优点:
1、将目标类和适配者类解耦
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则
类适配器还有的优点:
1、由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
类适配器的缺点:
1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。
对象适配器还有的优点:
1、把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。
对象适配器的缺点:
1、与类适配器模式相比,要想置换适配者类的方法就不容易。
适配器模式与代理模式的区别:
适配器模式
是把2个不同的东西转换到可以正常使用,适配器是去迎合目标对象与源对象。
代理模式
是2个对象都有相同的功能,2者接口是一样的。