【问题标题】:Two activities sharing common functionality两个共享通用功能的活动
【发布时间】:2014-02-26 20:18:08
【问题描述】:

我有两个活动:AddContactEditContact。它们都共享许多共同的实例变量和作用于该数据的方法。

重构此代码以避免重复代码的最佳方法是什么?

您能推荐任何特定的设计模式吗?最明显的当然是继承,但由于 android 中的每个活动都已经扩展 Activity,所以这是不可能的。

我已经想过创建另一个扩展Activity 的类,然后将公共变量和方法放入这个类中,然后在AddContactEditContact 中初始化这个类。但是,如果这确实是最好的方法,我是否应该将这个共享类中的所有方法和实例变量设为静态?

非常感谢您的宝贵时间。

【问题讨论】:

  • See this answer。您不会初始化“基础”Activity。你会从它extends你的两个Activities

标签: java android design-patterns


【解决方案1】:

如何继承是不可能的?您可以有一个扩展 Activity 的基类,然后让其他两个类扩展它以继承共享功能,例如:

public class MainActivity extends Activity {
      //Common functionality and instance methods
}

public class AddContact extends MainActivity {
     //Has all of Main Activity's non private methods/variables
}

public class EditContact extends MainActivity {
    //Has all of MainActivity's non private methods/variables.
}

另外,如果您不想直接使用 MainActivity,您可以将其抽象化以确保使用子类。这为您提供了通过共享方法/变量来减少冗余的好处,并且还允许您扩展此功能以使其特定于每个子类(如果需要)。

另一种选择是只使用单例来封装通用功能。

【讨论】:

  • 谢谢你,我会研究你建议的两种方法,看看哪一种更适合我的需要:)
【解决方案2】:

这取决于您想要在两个活动之间共享。但在我看来,最好的方法是将常用功能移入Fragment 并在这两个活动中使用它。如果这个功能有视觉元素,那么它可以是带有布局的可见片段。否则它可能是不可见的片段,其中包含纯逻辑。

【讨论】:

    【解决方案3】:

    我不建议继承,创建单个类的公共代码确实有利于可重用性,但是,从基类扩展的每个类都会为具有相同目的的事物分配重复的内存,谷歌不推荐除非真的有必要并且从中获得的优势非常明显,否则您应该看看Singleton 设计模式,这似乎是何时实现它的一个很好的例子,基本上你将有 1 个单一实例在不同组件之间完成这项工作,而不必每次都分配新对象,只需重用已创建的对象。

    希望对你有帮助!

    问候!

    【讨论】:

      【解决方案4】:
      public class Contact
      {
         String name
         //implement the rest of contact's functionality
      }
      
      
      
      public class AddContact extends Activity
      {
          // Create a new instance of Contact
      }
      
      public class EditContact extends Activity
      {
         // Create a new instance of Contact
      }
      

      仅在对象尚未创建时调用该方法有意义时才创建静态方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 2019-07-31
        相关资源
        最近更新 更多