【问题标题】:Deciding between utility class or inherit from a base activity在实用程序类或从基础活动继承之间做出决定
【发布时间】:2016-10-26 18:36:58
【问题描述】:

这更多是针对 Android 的最佳实践/性能相关问题。(我知道这可能是一个笼统的讨论,但考虑到 Android 环境,我希望缩小范围)。

假设我有一个方法(检查条件并将用户重定向到各种活动)。很多类都使用这种方法。

我无法决定是否在实用程序类中添加此方法,使其成为静态并从需要它的每个活动中调用它。

或者

创建一个基础活动,在其中添加方法,任何需要使用此方法的活动,都从基础活动继承。 (假设在这种特殊情况下我们可以使用单继承)。

想法?

编辑 这些是我检查过的与此相关的相关 SO 帖子。无法根据这些做出决定

Utility classes are evil?

If a "Utilities" class is evil, where do I put my generic code?

【问题讨论】:

  • 我的建议是调用实用程序来完成您的工作,然后在您的活动中创建一个回调方法来响应结果,您的实用程序方法不应该知道 ui 元素
  • @SarthakMittal 谢谢。但我有兴趣知道是什么帮助您做出使用实用程序类而不是使用基础活动的决定,将方法移到那里并通过使用此方法的任何活动继承此类?
  • 我通常将继承过程作为最后的手段,因为我们只能扩展一个类,如果只有一些类会使用该方法,最好使用接口,但是,如果你所有的活动都在进行需要方法然后创建一个基类就可以了
  • 同意。单继承绝对是要考虑的事情。但是就像我在问题中提到的那样,我想知道这是否不是问题,还有哪些其他因素会影响我决定参加实用课程的决定。无论如何,这个链接对于得出结论非常有用 - javarevisited.blogspot.com/2013/06/…

标签: java android inheritance utility-method


【解决方案1】:

还可以在需要时将类注入构造函数中。当您使用这种方法时,您可以轻松地在接口后面模拟这个类,并且可以使用模拟创建测试。

例如一些伪代码:

您的Utility 班级:

public class Utility implements IUtility {
    @Override
    public void add() { ... }

    @Override
    public void remove() { ... }
}

你的Utility 使用类:

public class UtilityUsingClass {
    private IUtility utility;
    public UtilityUsingClass(IUtility utility) {
        this.utility = utility;
    }

    public void myMethod() {
        // Use Utility class
        utility.add();
        ...
    }
}

在测试中可能如下所示:

@Test
public void testMyMethod() {
    UtilityUsingClass testClass = new UtilityUsingClass(new UtilityMock());
    testClass.myMethod();

    // assert stuff
}

UtilityMock:

public class UtilityMock implements IUtility {
    @Override
    public void add() { // Implements mock logic ... }

    @Override
    public void remove() { // Implements mock logic ... }
}

【讨论】:

  • 谢谢。我不确定我是否完全理解你的意思。
  • 太棒了。这澄清了你的答案。我真正感兴趣的是 - 是什么帮助您做出使用实用程序类而不是使用基类的决定,将方法移到那里以及任何从该基类继承方法的子类?
  • 有很多原因,其中一些被列在这个网站上 (javarevisited.blogspot.com/2013/06/…) 并且测试和更改注入类的能力非常好用
  • 并给出了 IOC 容器的用法。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2010-10-21
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2019-01-06
  • 2011-03-04
相关资源
最近更新 更多