私には、他のすべてのアクティビティが拡張する次のクラスがあります。ここにいくつかの擬似コードがあります:
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を拡張する他のクラスが5つまたは6つあり、次のようなことを行います。
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に同じコードを使用する5つのクラスのそれぞれで、それぞれのクラスに重複するコードがあり、ExActivityには独自の実装があります(うまくいけば、その文が意味をなします)。また、Strategy Patternを使用して、setupInterfaceの一意のコードを独自のクラスにカプセル化することも考えました。それは私には理にかなっているように思えますが、もっとエレガントなものがあるのではないかと思います。この時点で、CommonActivityからsetupInterface2とresetScreen2を削除し、ExActivityでこれらのメソッドをオーバーライドするだけでよいと考えています。それが最も簡単な解決策のようです。ここでの提案は素晴らしいでしょう!