我有两项活动:AddContact
和EditContact
。它们共享许多常见的实例变量和作用于该数据的方法。
重构此代码的最佳方法是什么,以便不会有任何重复的代码?
您能推荐使用任何特定的设计模式吗?最明显的当然是继承,但由于android中的每个活动都已扩展Activity
,这是不可能的。
我已经想过创建另一个扩展Activity
的类,然后在这个类中放入常用变量和方法,然后在AddContact
和EditContact
中初始化这个类。但是,如果这真的是最好的方法,我应该将此共享类中的所有方法和实例变量设为静态吗?
非常感谢你的时间。
答案 0 :(得分:3)
如何继承遗产?您可以拥有一个扩展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,您可以将其设为抽象,以确保使用子类。这为您提供了通过共享方法/变量来减少冗余的好处,并且还允许您扩展此功能以使其特定于每个子类(如果需要)。
另一种选择是使用Singleton来封装常用功能。
答案 1 :(得分:0)
这取决于你想要在两个活动之间分享的确切内容。但在我看来,最好的方法是将常用功能移到Fragment并在两个活动中使用它。如果此功能具有可视元素,则可以使用布局显示Fragment。否则它可能是不可见的片段,其中包含纯逻辑。
答案 2 :(得分:0)
我不推荐继承,创建单个类的公共代码对于可重用性确实很好但是,请记住,从基类扩展的每个类都将为具有相同目的的事物分配重复内存,谷歌不建议它除非真的有必要,而且它的优势非常明显,你应该看看Singleton设计模式,这似乎是何时实现它的一个很好的例子,基本上你将有1个单一的在不必每次都分配新对象的情况下在不同组件之间完成工作的实例,只需重用已经创建的对象。
希望它有所帮助!
问候!
答案 3 :(得分:0)
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
}
如果在没有创建对象的情况下调用方法有意义,则只创建静态方法