2017-02-24 10 views
1

私はかなり理論的な質問があります。ここにデザインパターンが必要ですか?

たとえば、私は表のようなオブジェクトのクラスを持っています。そして、このテーブルは、赤、青、黄色の異なる色で着色することができます。テーブルが以前に色付けされていなかった場合、結果は明らかです。それ以外の場合は、次のルールが適用されます。

red + yellow --> orange 
blue + yellow --> green 
red + blue --> purple 
red + blue + yellow --> brown 

これを実装するには、どのような方法が最適ですか?そのような場合のデザインはありますか?マイバリアントはあまりにも単純なことがあります

public class Table{ 

private boolean isRed; 
private boolean isBlue; 
private boolean isYellow; 

    public String colorRed(){ 
     isRed = true; 
     if (isBlue && isYellow) 
       return "brown"; 
     if (isBlue) 
       return "purple"; 
     if (isYellow) 
       return "orange"; 
     return "red"; 
    } 
    //... the same for other colors 
} 
+1

私は数値定数に色を関連付けて、代わりに簡単な計算を行うだろう'if's ^^ – moonwave99

+2

^私は一歩前進し、色を2の累乗に関連付けます。結果は、2の累乗で構成される数値の単純なスイッチまたはマップルックアップです。 – StoryTeller

+0

@ user2957954この例のための具体的なパターンや、必ずしも色に関係しない類似の 'if-else'ステートメントを持つ一般的なケースを探していますか?つまり、 'isBrown'や' isOrange'や 'isPurple'というフラグもありますか?ここでの要件を理解しようとしています。 – CKing

答えて

0

私はstate machineを提案する:

enter image description here

実装推奨

interface IColorState { 
     IColorState AddBlue(); 
     IColorState AddRed(); 
     IColorState AddYellow(); 
} 

class BlueState: IColorState { 
    public override AddBlue() {return new BlueState()} 
    public override AddRed() {return new PurpleState()} 
    public override AddYellow() {return new GreenState()} 
} 

class YellowState: IColorState {...} 

class RedState: IColorState {...} 

class PurpleState: IColorState { 
    public override AddBlue() {return new PurpleState()} 
    public override AddRed() {return new PurpleState()} 
    public override AddYellow() {return new BrownState()} 
} 
関連する問題