2012-12-12 53 views
2

我有以下所有其他活动扩展的类。下面是一些伪代码:应用设计模式以减少代码重复

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(除了什么已经在那里了):

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中的这些方法。这似乎是最简单的解决方案。这里的任何建议都会很棒!

回答

7

而不是考虑设计模式方面的问题,我建议您清楚地描述您的类,以便您可以实现其中自然存在的模式。当你从一个类中扩展了6个类时,其中5个类具有类似的行为,而另一个类没有类,或许你的类的继承模型是不正确的。也许有必要编写与实现公共逻辑的类相似的5个类,而黑羊可以自行实现其特殊逻辑。

只是一个想法,但我首先要在一个简单的句子中清楚地描述这些类,然后实现可能会出现的任何模式,而不是试图将它们合并到一个或另一个预定义的模式中。

+0

不错的答案!!!! –

+0

真的很好的建议 –

+0

很好的答案。我想你可以把它看作是一个内部工厂方法,用于设置/重置处理程序,而工厂方法是一个模板方法,可以被需要不同处理的奇怪类重写。 –