Java 中的类适配器模式

问题描述

interface movement{
    void jump();    //Jump is 1 Feet high
}

class mario(){
    void specificJump(int feet);   //Use variable feet to jump higher than 1 Feet
}

public class myAdapter extends mario implements movement{
    int feet;
    public void jump(){
        specificJump(feet); 
    }
}

movement 是一个具有单一方法的界面,可让您跳 1 英尺高。
mario 是一个带有方法 specificJump(int feet) 的类,可以让你跳到 1 英尺以上。
myAdapter 的实现应该是这样的:

  1. 声明变量 int feet
  2. 通过声明和初始化 public void jump() 来实现接口移动
  3. 使用函数specificJump(feet)跳转到int英尺的高度

因此,当尝试调用 jump() 时,您实际上会执行 specificJump(feet)。

问题:为了执行 specificJump(int feet) 我们首先需要调用 jump().
但是 specificJump(int feet) 需要一个参数,是否可以像我一样在 myAdapter 中声明 int feet?
我的问题是,当您必须不带参数调用 jump() 时,如何获得 int feet 值? (使用类适配器模式)

解决方法

空跳转(); //跳高1英尺

好吧,如果那是接口契约,那么实现不应该违反它 并允许跳跃高于 1 英尺。

因此,您可能会:

class MovableMario extends Mario implements Movement {
    @Override
    public void jump() {
        specificJump(1);
    }
}

任何需要跳跃特定高度的客户端仍然可以使用mario.specificJump(feet)

请注意,该设计非常有限,理想情况下,适配器将以装饰器的形式出现并委托给内部 Mario