head first-----------adpter pattern

head first-----------------深入浅出适配器模式
     适配器模式:将一个类的接口,转换成客户想要的另外一个接口,适配器然原本接口不兼容的类可以合作无间。从而可以不用更改旧的代码就可以适应新的业务需求
     package com.clark.adapterpattern.abstractclass;
/**
 * Duck 接口
 * @author Administrator
 *
 */
public interface Duck {
public void quack();//呱呱叫方法
public void fly();//鸭子会飞
}
package com.clark.adapterpattern.abstractclass;
/**
 * 火鸡接口
 * @author Administrator
 *
 */
public interface Turkey {
public void gobble();//火鸡嘎嘎叫
public void fly();//火鸡也会飞,只是飞得短
}

package com.clark.adapterpattern;


import com.clark.adapterpattern.abstractclass.Duck;
/**
 * 绿头鸭
 * @author Administrator
 *
 */
public class MallardDuck implements Duck {


@Override
public void quack() {
System.out.println("Quack.......");
}


@Override
public void fly() {
System.out.println("fly remote distance.......");
}


}

package com.clark.adapterpattern;


import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 火鸡的具体实现
 * @author Administrator
 *
 */
public class WildTurkey implements Turkey {


@Override
public void gobble() {
System.out.println("Gobble gobble.....");
}


@Override
public void fly() {
System.out.println("fly short distance.....");
}


}
package com.clark.adapterpattern;


import java.util.Random;


import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 鸭子转换成火鸡的适配器
 * @author Administrator
 *
 */
public class DuckAdpter implements Turkey {
public Duck duck;
public Random rand;
public DuckAdpter(Duck duck){
this.duck=duck;
rand=new Random();
}
@Override
public void gobble() {
this.duck.quack();
}
@Override
public void fly() {
if(rand.nextInt(5)==0){
this.duck.fly();
}
}
}
package com.clark.adapterpattern;


import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 火鸡转化成鸭子的适配器
 * @author Administrator
 *
 */
public class TurkeyAdpter implements Duck {
public Turkey turkey;
public TurkeyAdpter(Turkey turkey){
this.turkey=turkey;
}
@Override
public void quack() {
this.turkey.gobble();
}


@Override
public void fly() {
//由于火鸡飞得距离短,所以让它多飞几次
for (int i = 0; i < 3; i++) {
this.turkey.fly();
}

}


}
package com.clark.adapterpattern;


import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;


/**
 * Test CLASS
 * @author Administrator
 *
 */
public class TestDrive {
public static void main(String[] args) {
//先创建一只鸭子和一只火鸡
MallardDuck duck=new MallardDuck();
WildTurkey turkey=new WildTurkey();

//然后将火鸡包装进火鸡适配器,鸭子装到鸭子适配器
Duck turkryAdpter=new TurkeyAdpter(turkey);
Turkey DuckAdpter=new DuckAdpter(duck);
//打印原来火鸡和鸭子的行为
System.out.println("The Turkey says.....");
turkey.gobble();
turkey.fly();
System.out.println("\nThe Duck says.....");
testDuck(duck);
//使用适配器之后输出的行为
System.out.println("\nThe turkeyadpter says....");
testDuck(turkryAdpter);
System.out.println("\nThe turkeyAdpter says....");
testTurkey(turkey);
}
public static void testDuck(Duck duck){
duck.quack();
duck.fly();
}
public static void testTurkey(Turkey turkey){
turkey.gobble();
turkey.fly();
}


}

//=============Test result================
The Turkey says.....
Gobble gobble.....
fly short distance.....


The Duck says.....
Quack.......
fly remote distance.......


The turkeyadpter says....
Gobble gobble.....
fly short distance.....
fly short distance.....
fly short distance.....


The turkeyAdpter says....
Gobble gobble.....
fly short distance.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值