java设计模式之适配器模式
2016-07-21 20:26
501 查看
说到适配器,我们可能会想到电脑的适配器,没错,其实作用是一样的,电脑的适配器在中国可以使用,在美国也可以使用,它的主要作用是在新接口和老接口之间进行适配。。这就是一个适配的过程,适配器模式的类图如下:
![](http://images2015.cnblogs.com/blog/717907/201607/717907-20160721201622482-734127319.png)
这个类图是我在其他的地方截到的,我以前觉的类图特别不好看,慢慢接触之后发现类图和流程图都特别有意义,一看就特别的清晰。整个流程就是通过Adapter把Adaptee转换为目标(Target)的子类。既然已经知道原理了,那下面开始码代码吧。我来举例一个场景吧,经常需要使用到投影仪,但是有一些人的电脑并不支持投影仪的大口,只能使用适配器了。那就是可以把小口转换为大口。
下面说一下适配器的优缺点:
优点:
1、将目标类和适配者类解耦
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则
类适配器还有的优点:
1、由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
类适配器的缺点:
1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。
对象适配器还有的优点:
1、把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。
对象适配器的缺点:
1、与类适配器模式相比,要想置换适配者类的方法就不容易。
适配器模式与代理模式的区别:
适配器模式
是把2个不同的东西转换到可以正常使用,适配器是去迎合目标对象与源对象。
代理模式
是2个对象都有相同的功能,2者接口是一样的。
![](http://images2015.cnblogs.com/blog/717907/201607/717907-20160721201622482-734127319.png)
这个类图是我在其他的地方截到的,我以前觉的类图特别不好看,慢慢接触之后发现类图和流程图都特别有意义,一看就特别的清晰。整个流程就是通过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者接口是一样的。
相关文章推荐
- 从入门到精通:让人又爱又恨的注解(一)
- 两个大的整数的运算(java)
- 告诉你一个java对象占用的内存大小的方法
- spring配置文件中classpath路径解析
- spring、spring mvc以及IOC的阅读
- myeclipse search查找打开第二个文件时第一个文件被关闭关闭
- 链队列java实现
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- 使用 Arrays 类操作 Java 中的数组
- Java 中的Synchronizer
- Java加密解密算法-DES加密解密
- Java加密解密算法-SHA加密
- Java加密解密算法-MD5加密解密
- Java 多线程:ThreadLocal关键字
- nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException
- Wicket + Spring integration example
- Java加密解密算法-Base64加密解密
- JavaSE基础(三)
- eclipse不提示js怎么办
- Java加密解密算法-AES加密解密