版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39424143/article/details/89682308
github项目:https://github.com/wangjianxiandev/design
- 火鸡冒充鸭子:
假设鸭子是某一个公司做的,但是另一个公司做了一个火鸡,但是如果火鸡想要做鸭子下,所以需要将火鸡和鸭子中间引入一个适配器,通过这个适配器之后,使得外界看来是一个鸭子,所以火鸡继承的是一个鸭子,但是调用的内容是个火鸡的内容。 - 首先声明鸭子和火鸡的接口
package shipeiqi;
public interface Duck {
public void gaga();
public void fly();
}
public interface Turkey {
public void gogo();
public void fly();
}
- 实现接口
public class RedDuck implements Duck {
@Override
public void gaga() {
System.out.println("Ga Ga");
}
@Override
public void fly() {
System.out.println("Fly a long distance");
}
}
public class RedTurkey implements Turkey {
@Override
public void gogo() {
System.out.println("Go Go");
}
@Override
public void fly() {
System.out.println("Fly a short distance");
}
}
- 实现适配器
//用户看到的是鸭子,但是在鸭子的对应方法中调用的是火鸡的方法,叫起来像火鸡,飞起来像鸭子
public class TurkeyAdapter implements Duck {
private Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
@Override
public void gaga() {
turkey.gogo();
}
@Override
public void fly() {
for(int i = 0;i<3;i++){
turkey.fly();//因为鸭子飞的远,所以更改一部分
}
}
}
- 测试
public class MainTest {
public static void main(String[] args) {
RedDuck redDuck = new RedDuck();
RedTurkey redTurkey = new RedTurkey();
Duck duckTurkey = new TurkeyAdapter(redTurkey);
duckTurkey.gaga();
duckTurkey.fly();
}
}
- 将一个类的接口,火鸡类转换成另一个鸭子接口,使原来不兼容的接口兼容起来
- 用户调用适配器转化出来的目标接口方法
- 适配器再调用被适配者的相关接口方法
- 用户收到反馈结果,感觉只是和目标接口交互