码迷,mamicode.com
首页 > 其他好文 > 详细

Adapter设计模式

时间:2015-03-29 10:55:10      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:设计模式   adapter   

Adapter适配器模式是将两个不兼容的类组合在一起使用。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。

Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter适配器,在两种接口之间创建一个混合接口。

Adapter适配器设计模式中有3个重要角色:被适配者Adaptee,适配器Adapter和目标对象Target。其中两个现存的想要组合到一起的类分别是被适配者Adaptee和目标对象Target角色,我们需要创建一个适配器Adapter将其组合在一起。

实现Adapter适配器设计模式有两种方式:组合(compositon, has-a关系)和继承(inheritance,is-a关系)。

对象适配器模式使用组合,UML图如下:

技术分享

类适配器模式使用继承,UML图如下:

技术分享

假设要画图形,有圆形和方形两个类,现在需要一个既可以画圆形又可以画方形的类。

组合关系的Adapter适配器模式如下:

[java] view plaincopy
  1. //圆形,目标对象  
  2. class Cirecle{  
  3.     public void drawCircle(){  
  4.     System.out.println(“Draw circle”);  
  5. }  
  6. }  
  7. //方形,被适配对象  
  8. class Square{  
  9.     public void drawSquare(){  
  10.     System.out.println(“Draw square”);  
  11. }  
  12. }  
  13. //既可以画圆形,又可以画方形,适配器  
  14. public class HybridShape extends Circle{  
  15.     private Square square;  
  16.     public HybridShape(Square square){  
  17.     this.square = square;  
  18. }  
  19. public void drawSquare(){  
  20.     square.drawSquare();  
  21. }  
  22. }   

适配器继承目标对象,同时组合被适配对象,如果需要画圆时,直接调用父类的画圆方法即可,如果需要画方,则调用被适配对象的画方形方法。

继承关系的Adapter适配器模式如下:

[java] view plaincopy
  1. interface ICircle{  
  2.     public void drawCircle();  
  3. }  
  4. interface ISquare{  
  5.     public void drawSquare();  
  6. }  
  7. //圆形  
  8. class Cirecle implements ICircle{  
  9.     public void drawCircle(){  
  10.     System.out.println(“Draw circle”);  
  11. }  
  12. }  
  13. //方形  
  14. class Square implements ISquare{  
  15.     public void drawSquare(){  
  16.     System.out.println(“Draw square”);  
  17. }  
  18. }  
  19. //既可以画圆形,又可以画方形,适配器  
  20. public class HybridShape implements ICircle, ISquare{  
  21.     private ISquare square;  
  22.     private ICircle circle;  
  23.     public HybridShape(Square square){  
  24.     this.square = square;  
  25. }  
  26. public HybridShape(Circle circle){  
  27.     this.circle = circle;  
  28. }  
  29. public void drawSquare(){  
  30.     square.drawSquare();  
  31. }  
  32. public void drawCircle(){  
  33.     circle.drawCircle();  
  34. }  
  35. }   

Java中类不允许多继承,但是可以实现多个接口,继承关系的Adapter适配器设计模式就是利用java可以实现多个接口的特性。

JDK里面的适配器模式应用:

?java.util.Arrays#asList()
?java.io.InputStreamReader(InputStream)
?java.io.OutputStreamWriter(OutputStream)
?javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
?javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()

Adapter设计模式

标签:设计模式   adapter   

原文地址:http://blog.csdn.net/scboyhj__/article/details/44724585

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!