2017-02-24 77 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

^我会向前走一步,将颜色与两个幂相关联。然后结果是一个简单的开关或地图查找数值由两个幂组成。 – 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()} 
} 
相关问题