【问题标题】:Apply design pattern to reduce code duplication应用设计模式以减少代码重复
【发布时间】:2012-12-12 02:09:11
【问题描述】:

我有以下所有其他活动扩展的类。这是一些伪代码:

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,它与其他 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();
    }

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

【问题讨论】:

    标签: java android design-patterns


    【解决方案1】:

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

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

    【讨论】:

    • 不错的答案。我想您可以将其视为设置/重置处理程序的内部工厂方法,工厂方法是模板方法,可以被需要不同处理的奇数类覆盖。
    • 在您做出决定后,请分享您的设计以造福我们。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多