适配器模式【结构模式第六篇】
适配器模式(Adapter Pattern)(另称-变压器模式):
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
1、(类适配器)模式所涉及的角色有:
1/目标(Target)角色:这就是所期待得到的接口。由于是类适配器模式,因此目标不可以是类。
2/源(Adaptee)角色:现有需要适配的接口。
3/适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,
而必须是具体类。
//目标角色类public interface Target{//源类有的方法void sampleOperation1();//源类没有的方法void sampleOperation2();}源类(具体类)public class Adaptee{//源类含有的方法sampleOperation1()public void sampleOperation1(){}}//适配器角色public class Adapter extends Adaptee implements Target{public void sampleOperation2(){}}//Target类public interface Target{//源类有的方法void sampleOperation1();//源来没有的方法void sampleOperation2();}源类(具体类)public class Adaptee{//源类含有的方法sampleOperation1()public void sampleOperation1(){}}//适配器类public class Adapter implements Target{private Adaptee adaptee;public Adapter(Adaptee adaptee){super();this.adaptee = adaptee;}//源类有的方法,适配器直接委派就可以了public void sampleOperation1(){adaptee.sampleOperation();}//源类没有,需要补充public void sampleOperation2(){//............}}//Itermeration类 import java.util.Iterator; import java.util.*; import java.util.Enumeration; public class Itermeration implements Enumeration{ private Iterator it; public Itermeration(Iterator it){ this.it = it; //是否存在下一个元素 public boolean hasMoreElements(){ return it.hasNext(); } //返还下一个元素 public Object nextElement() throws NoSuchElementException{ return it.next(); } } } //Enuterator类 import java.util.Iterator; import java.util.*; import java.util.Enumeration; public class Enuterator implements Iterator{ Enumeration enum; public Enuterator(Enumeration enum){ this.enum = enum; } //是否存在下一个元素 public boolean hasNext(){ return enum.hasMoreElements(); } //返还下一个元素 public Object next() throws NoSuchElementsException{ return enum.nextElement(); } //删除当前的元素(不支持) public void remove(){ throw new UnsupportedOperationException(); } } --------------------------------------------------//立方体类public class Cube{private double width;public Cube(double width){this.width = width;}//计算体积public double calculateVolume(){return width*width*width;}//计算面积public double calculateFaceArea(){return width*width;}//长度的取值方法public double getWidth(){return this.width;}//长度的赋值方法public void setWidth(double width){this.width = width;}}//目标接口角色public interface BallIF{//计算面积double calculateVolume();//半径的取值方法double getRadius();//半径的赋值方法void setRadius(double radius);}//适配器类角色public class MagicFinger implements BallIF{private double redius = 0;private static final double PI = 3.14D;private Cube adaptee;public MagicFinger(Cube adaptee){super();this.adaptee = adaptee;radius = adpatee.getWidth();}//计算面积public double calculateArea(){return PI*4.0D*(radius);}public double calculateVolume(){return PI*(4.0D/3.0D)*(radius*radius*radius);}//半径取值方法public double getRadius(){return radius;}public void setRadius(double radius){this.radius = radius;}}