定义:定义为将一个类的接口变换成客户端所期待的一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
用自己的话说:通过一个中间类进行接口转换,把一个接口转换成另外一个接口
代码:
定义一个鸭子接口:
public interface Duck {
//这是一个鸭接口,适配器要以该接口作为目标进行适配
void quack();//鸭子呱呱叫
void fly();//鸭子会会飞
}
定义一个鸭子接口的实现类,绿头鸭:
public class MallardDuck implements Duck {
//绿头鸭是一只鸭
/* (非 Javadoc)
* @see com.jjt.adapter.Duck#quack()
*/
@Override
public void quack() {
//
System.out.println("我是一只绿头鸭,嘎嘎嘎嘎嘎");
}
/* (非 Javadoc)
* @see com.jjt.adapter.Duck#fly()
*/
@Override
public void fly() {
//
System.out.println("~~~~~~~飞行中~~~~~");
}
}
定义一个火鸡接口:
public interface Turkey {
//这是一个火鸡接口,是用于被适配的
void gobble();//火鸡只会咯咯咯咯咯咯叫
void fly();//火鸡会飞,但是飞不远
}
定义一只火鸡:
public class WildTurkey implements Turkey {
//这是一只火鸡类,用于被适配
/* (非 Javadoc)
* @see com.jjt.adapter.Turkey#gobble()
*/
@Override
public void gobble() {
//
System.out.println("我是一只火鸡,咯咯咯咯咯咯");
}
/* (非 Javadoc)
* @see com.jjt.adapter.Turkey#fly()
*/
@Override
public void fly() {
//
System.out.println("~~飞行~~");
}
}
定义火鸡适配器,功能是将火鸡转变为鸭子:
public class TurkeyAdapter implements Duck{
Turkey turkey;
/**
*
*/
public TurkeyAdapter(Turkey turkey) {
// 传入一只火鸡进行适配
this.turkey=turkey;
}
/* (非 Javadoc)
* @see com.jjt.adapter.Duck#quack()
*/
@Override
public void quack() {
// 适配鸭子的叫方法
this.turkey.gobble();
System.out.println("超级适配器之变声:gagagagaga");
}
/* (非 Javadoc)
* @see com.jjt.adapter.Duck#fly()
*/
@Override
public void fly() {
// 适配鸭子的飞方法
for(int i = 0 ; i < 5 ;i ++){
this.turkey.fly();//让火鸡飞五下相当于鸭子飞
}
}
}
测试:
public static void main(String[] args){
Duck mallardDuck = new MallardDuck();
catchDuck(mallardDuck);
Turkey turkey = new WildTurkey();
Duck turkeyDuck = new TurkeyAdapter(turkey);
catchDuck(turkeyDuck);
}
public static void catchDuck(Duck duck){
System.out.println("鸭子乐园:只有鸭子才能进来");
duck.quack();
duck.fly();
}
运行结果:
鸭子乐园:只有鸭子才能进来
我是一只绿头鸭,嘎嘎嘎嘎嘎
~~~~~~~飞行中~~~~~
鸭子乐园:只有鸭子才能进来
我是一只火鸡,咯咯咯咯咯咯
超级适配器之变声:gagagagaga
~~飞行~~
~~飞行~~
~~飞行~~
~~飞行~~
~~飞行~~