我有以下所有其他活动扩展的类。这是一些伪代码:
public class CommonActivity extends Activity
{
//class member variables
protected void setupInterface(String activityName)
{
//a bunch of setup code here
Button select = new Button;
Button create = new Button;
Button delete = new Button;
}
protected void resetScreen()
{
selectButton.highlight();
createButton.unhighlight();
deleteButton.unhighlight();
}
}
我有五到六个其他扩展CommonActivity的类,并执行以下操作:
public class SectionActivity extends CommonActivity
{
//class member variables
protected void onCreate()
{
setupInterface("sectionActivity");
}
}
现在我有另一个从CommonActivity扩展的Activity,它与其他活动略有不同。我发现自己编写了以下代码:
public class ExActivity extends CommonActivity
{
//class member variables
protected void onCreate()
{
setupInterface2("sectionActivity");
}
}
然后将以下方法添加到CommonActivity(除了已经存在的内容):
protected void setupInterface2(string activityName)
{
//a bunch of setup code here
Button select = new Button;
}
protected void resetScreen2()
{
selectButton.highlight();
}
现在我发现自己想知道消除代码重复的最佳方法。代码中的“一堆设置代码”中的注释永远不会在活动中发生变化。我应该在这里使用某种设计模式吗?我玩弄了模板模式的想法,但是对于setupInterface使用相同代码的五个类中的每一个都会在它们各自的类中具有重复的代码,而ExActivity将具有其自己的实现(希望该句子甚至有意义)。我还考虑过使用策略模式将setupInterface中的唯一代码封装到自己的类中。这对我来说似乎很合理,但我觉得可能会有更优雅的东西。我甚至想在这一点上我应该从CommonActivity中删除setupInterface2和resetScreen2,并简单地在ExActivity中覆盖这些方法。这似乎是最简单的解决方案。这里的任何建议都会很棒!
答案 0 :(得分:7)
我没有考虑设计模式方面的问题,而是建议您清楚地描述您的类,以便您可以实现其中自然存在的模式。如果从一个类扩展了6个类,其中5个类具有相似的行为而另一个类没有,那么类的继承模型可能不正确。也许组成与实现公共逻辑的类相似的5个类并且黑羊可以自己实现其特殊逻辑是有意义的。
只是一个想法,但我首先在一个简单的句子中清楚地描述每个类,然后实现任何可能来自那些自然而不是试图将它们放入一个或另一个预定义模式的模式。