Java 应用设计模式减少代码重复

Java 应用设计模式减少代码重复,java,android,design-patterns,Java,Android,Design Patterns,我有一节课,所有其他活动都是从这节课开始的。下面是一些伪代码: public class CommonActivity extends Activity { //class member variables protected void setupInterface(String activityName) { //a bunch of setup code here Button select = new Button;

我有一节课,所有其他活动都是从这节课开始的。下面是一些伪代码:

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扩展而来的,与其他活动略有不同。我发现自己正在编写以下代码:

public class ExActivity extends CommonActivity
{
    //class member variables

    protected void onCreate()
    {
        setupInterface2("sectionActivity");
    }
}
然后将以下方法添加到CommonActivity(除了已经存在的方法之外):


现在我想知道消除代码重复的最佳方法。代码中表示“一堆设置代码”的注释在活动之间永远不会更改。我应该在这里使用某种设计模式吗?我曾玩弄过模板模式的想法,但在setupInterface中使用相同代码的五个类中,每个类在各自的类中都会有重复的代码,而ExActivity会有自己的实现(希望这句话有意义)。我还考虑使用Strategy模式将setupInterface中唯一的代码封装到它们自己的类中。这对我来说似乎很合理,但我觉得可能会有更优雅的东西。在这一点上,我甚至认为我应该从CommonActivity中删除setupInterface2和resetScreen2,并简单地以精确性覆盖这些方法。这似乎是最简单的解决办法。这里的任何建议都会很好

与其从设计模式的角度考虑问题,我建议您清楚地描述类,这样您就可以实现它们之间自然存在的模式。如果有6个类从一个类扩展而来,其中5个具有类似的行为,而另一个没有,那么类的继承模型可能不正确。也许有必要组成5个类,它们与实现公共逻辑的类相似,而害群之马可以自己实现其特殊逻辑


这只是一个想法,但我首先会用一句简单的话清楚地描述每个类,然后实现任何可能自然产生的模式,而不是尝试将它们放入一个或另一个预定义的模式中

回答得好。我想您可以将其视为安装/重置处理程序的内部工厂方法,工厂方法是一个模板方法,可以被需要不同处理的奇数类覆盖。在您决定之后,请务必分享您的设计,以使我们受益。谢谢
protected void setupInterface2(string activityName)
    {
        //a bunch of setup code here
        Button select = new Button;
    }
protected void resetScreen2()
    {
        selectButton.highlight();
    }