适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式的一个示例:
请做一个kittie的具体类,并实现miao()、catchRat()、run()、sleep()等方法。再做一个puppie的接口,要求有wao()、fetchBall()、run()、sleep()等方法。现在john有一个朋友想要一只Pupple,可是只找到一只Kittie。John需要使用适配器模式把Kittie“适配”成Puppie,让他的朋友满意。请问John该怎么做(提示:量力而行)。
根据提示可以量力而为,因此John需要把miao()适配成wao(),catchRat()适配成fetchBall(),run(),sleep()则保持不变。系统源代码如下:
系统需要的是带有puppie接口的类,下面给出的就是扮演目标角色的puppie接口的源代码。
/*
* 目标角色的puppie接口
* */
public interface Puppie {
public void wao();
public void fetchBall();
public void run();
public void sleep();
public void setName(String name);
public String getName();
}
接下来给出的是扮演适配器模式的源角色的kittie类的源代码。kittie类是系统现有的功能相近的一个类,但是它的接口与puppie的接口不同,因此不符合要求。
/*
* Kittie源代码
* */
public class Kittie {
private String name;
public void miao(){}
public void catchRat()
{
}
public void run()
{
}
public void sleep()
{
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
下面给出的是适配器模式的核心角色适配器角色,这个角色由John类扮演
public class John extends Kittie implements Puppie{
@Override
public void wao() {
// TODO Auto-generated method stub
this.miao();
}
@Override
public void fetchBall() {
// TODO Auto-generated method stub
this.catchRat();
}
public void run()
{
super.run();
}
public void sleep()
{
super.sleep();
}
public void setName(String name)
{
super.setName(name);
}
public String getName()
{
return super.getName();
}
}
什么时候使用适配器模式呢?
系统需要使用现有的类,而此类的接口不符合系统的需要。
原文:http://www.cnblogs.com/xtsylc/p/4721024.html