设计模式(5)--适配器模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
    }
}
  • 将一个类的接口,火鸡类转换成另一个鸭子接口,使原来不兼容的接口兼容起来
    - 用户调用适配器转化出来的目标接口方法
    - 适配器再调用被适配者的相关接口方法
    - 用户收到反馈结果,感觉只是和目标接口交互

猜你喜欢

转载自blog.csdn.net/qq_39424143/article/details/89682308