【问题标题】:Is there a way to cleanly avoid duplicate code in this instance?在这种情况下,有没有办法完全避免重复代码?
【发布时间】:2020-01-15 19:37:09
【问题描述】:

我正在使用 Java 开发 android,并且正在实现 Model-View-Presenter 架构。玩家可以玩两种类型的游戏:

  • 游戏A
  • 游戏 B

这两款游戏非常相似,但都有各自的 .class 文件和(例如 GameA.class 和 GameB.class)。

在这两种情况下,它们各自的演示者都是相同的,唯一改变的是模型类的实例化和声明。例如:

GameAPresenter.class:

class GameAPresenter{

    private GameA game;
    // other stuff here that happens in both presenters

    GameAPresenter(int par1, int par2){
        this.game = new GameA(par1, par2);
        //other stuff here that happens in both presenters

    }
}

GameBPresenter.class:

class GameBPresenter{

    private GameB game;
    // other stuff here that happens in both presenters

    GameBPresenter(int par1, int par2){
        this.game = new GameB(par1, par2);
        //other stuff here that happens in both presenters

    }
}

有什么方法可以完全避免重复代码,由单行 cmets 模拟? 如果我可以让两个模型共享一个演示者,则奖励。

【问题讨论】:

  • 关于代码审查的问题应该在Code Review提出

标签: java android class duplicates mvp


【解决方案1】:

您将要创建一个通用的Game 类,然后GameAGameB 都可以继承自。

同样可以使用GamePresenter,创建一个通用的GamePresenterAGamePresenterB 可以继承。您也可以在每次创建 GamePresenter 的新实例或调用某个方法时给它一个 Game。这样就可以有一个GamePresenter,它可以使用任何Game 来呈现它。

【讨论】:

  • 考虑Game是否应该是一个接口而不是一个超类。另外,Game 在这里不需要是通用的,GamePresenter 也可能不需要是通用的;多态性可能就足够了。最终可能只需要一个GamePresenter 类。
  • 好的,非常感谢kaya3,老实说,我对技术术语不太了解。谢谢推荐:D
  • 添加到@kaya3 的评论。我们倾向于prefer composition over inheritance
  • 这完全符合我将在明天重构代码时创建的抽象。感谢 Nizar 的精彩回答!
  • @Nizar 这绝对是关于 OO 设计的,是的;我将其称为一个更普遍的设计问题,而不是专门针对设计模式的问题,但也许有一个命名模式适用于这种情况。设计通常被认为是软件工程的一部分,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多