您的位置:首页 > 其它

适配器模式

2015-08-17 13:32 176 查看
适配器模式可以将一个类的接口转换成客户希望的另一个接口。当然,前提是这个类有能力实现客户希望的那些功能,否则转换毫无意义。

现假设有一个Duck接口,它只要两个方法,定义如下:

package Adaptor;

/**
* Created by sgzhang on 2015/8/17.
*/
public interface Duck {
void quack();
void fly();
}


但是手上只有一只Turkey。它的代码如下:
//首先是Turkey的接口

package Adaptor;

/**
* Created by sgzhang on 2015/8/17.
*/
public interface Turkey {
void gobble();
void fly();//MallarTurkey是Turkey的一种,代码如下:
package Adaptor;

/**
* Created by sgzhang on 2015/8/17.
*/
public class MallarTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("咕咕叫!");
}

@Override
public void fly() {
System.out.println("飞一点点远!");
}
}
我们需要用一只Turkey去冒充Duck,因此要将Turkey的方法适配成Duck的方法。
首先是叫,Duck的是quack(),显然只需要在适配器中的quack()方法内调用gobble()就可以了。

接着是飞,Duck和Turkey都有这个方法,所不同的是鸭子飞一次是土鸡飞一次距离的5倍,为了让伪装不露馅,我们让土鸡飞五次。

package Adaptor;

/**
* Created by sgzhang on 2015/8/17.
*/
public class TurkeyAdaptor implements Duck{

Turkey turkey;

public TurkeyAdaptor(Turkey turkey) {
this.turkey=turkey;
}

@Override
public void quack() {
turkey.gobble();
}

@Override
public void fly() {
for(int i=0;i<5;i++){
turkey.fly();
}
System.out.println("飞了5次就和鸭子飞一次那么远了,嘿嘿!");
}
可以看到该适配器内部有一个Turkey的引用,在适配器的构造方法中得以指定所指。

最后是测试程序:

package Adaptor;

/**
* Created by sgzhang on 2015/8/17.
*/
public class AdaptorTest {
public static void main(String[] args){
//需要一只Duck但是现在只有Turkey,为了交差只能用土鸡去冒充鸭子了
Duck aDuck=new TurkeyAdaptor(new MallarTurkey());
aDuck.fly();
aDuck.quack();
System.out.println("调用者:这是一只好鸭子!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: