2016-11-24 86 views
0

我有它們通過屬性的值來定義2個狀態類(如開始,可以是假的真)Java的永久開關

當我打電話從一個實例的方法我想獲得一個不同的行爲取決於狀態。 我目前正在使用if語句來查詢每次調用方法時的狀態,但我認爲可能有更快的方法來做到這一點(類似於多態性可能?)

是否有一種優雅的方式實施這個?我想有兩個子類inherinting和鑄造他們的時候的行爲變化,但也許有更好的東西

下面一個虛擬的例子(我的實際問題是耗費更多的時間,因此需要改進的地方)

public class StateChangingClass { 
private boolean started; 

public StateChangingClass() { 
    started = false; 
} 

public void start(){started = true;} 
public void end(){started = false;} 

public boolean checkCondition(double time) { 
    if (started) { 
     if (time>0) {return true;} 
     else {return false;} 
     } 

    else {return false;} 
    } 

}

+2

你的示例代碼是過於簡單化,你有什麼實際的問題,顯示代碼的問題,也許添加註釋何種操作是昂貴的,你想要的東西不同。 – luk2302

+2

「我認爲可能有更快的方法來做到這一點」我堅信,這將會變得緩慢。 '返回開始&&時間> 0;'很容易評估。 –

+0

我覺得如果不是實際的代碼,但仍然適當模擬實際的代碼會更好。這可以使用三元來解決。 – Mritunjay

回答

2

在這個例子中,它太多了,但也許你會明白你如何在你的情況下使用它。我添加了一個接口'ConditionChecker',它有兩個實現。方法的「開始」和「結束」只需設置所需的ConditionChecker。

public class StateChangingClass { 

    private ConditionChecker conditionChecker; 

    public StateChangingClass() { 
    conditionChecker = StartedChecker.INSTANCE; 
    } 

    public void start() { 
    conditionChecker = StartedChecker.INSTANCE; 
    } 

    public void end() { 
    conditionChecker = EndChecker.INSTANCE; 
    } 

    public boolean checkCondition(double time) { 
    return conditionChecker.check(time); 
    } 

    interface ConditionChecker { 

    boolean check(double time); 
    } 

    static class StartedChecker implements ConditionChecker { 

    public static final ConditionChecker INSTANCE = new StartedChecker(); 

    @Override 
    public boolean check(double time) { 
     return (time > 0); 
    } 
    } 

    static class EndChecker implements ConditionChecker { 

    public static final ConditionChecker INSTANCE = new EndChecker(); 

    @Override 
    public boolean check(double time) { 
     return false; 
    } 
    } 
}