【问题标题】:Class adapter pattern in JavaJava中的类适配器模式
【发布时间】:2021-05-19 20:02:58
【问题描述】:
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 feet 的高度

所以当你尝试调用 jump() 时,你实际上会执行 specificJump(feet)。

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

【问题讨论】:

  • 大概feet 的值会被传递到myAdapter 的构造函数中,或者通过setter 方法设置。 newMovement 是什么?应该是myAdapter extends mario
  • 是的,谢谢,刚刚改了。
  • 老实说,这个设计似乎没有任何意义。如果接口的契约定义了跳跃不应高于 1 英尺高,那么让实现违反该契约是没有意义的。此外,您可以在 mario 中覆盖 jump 并跳转到 mario 默认需要跳转的高度,然后还有参数化的 jump(int feet) 重载。那是任务吗?你真正想解决什么问题?

标签: java oop design-patterns adapter


【解决方案1】:

无效跳转(); //跳跃是1英尺高

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

因此,您可能会:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多