从while循环中消除if-else

时间:2016-03-25 13:55:43

标签: class if-statement design-patterns while-loop

我有两节课:

class A:
    b = B()
    function doSomething():
        while True:
             b.doSomething()

class B:
    counter = 0
    function doSomething():
        if counter < 10: 
            performMethod1()
        else:
            performMethod2()
        counter += 1
    function performMethod1(): ...
    function performMethod2(): ...

我觉得这段代码很糟糕,因为我知道B.performMethod2()的执行次数比B.performMethod1()要多得多,但是if-else(如果是&lt; 10)将会是我每次进入B.doSomething()时都会检查。

此外,我不想打破A类的while循环,因为我想从A.doSomething()中隐藏B类的实现细节。

有没有什么好方法可以消除B.doSomething()的if-else?谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用state pattern。 然后你会创建两个状态,一个用于计数器&lt; 10(stateA)和一个counter是&gt; = 10(statB)。当stateA中的计数器达到10时,将发生从stateA(初始stat)到stateB的转换。

答案 1 :(得分:0)

if语句的开销应该非常小而且不是问题。但如果你需要优化它,你可以尝试这样的事情。

class A:
    b = B()
    function doSomething():

        while True:
             if b.counter < 10: 
                 b.doSomething1()
             else:
                 break

        while True:
             b.doSomething2()
class B:
    counter = 0

    function doSomething1():
        performMethod1()
        counter += 1

    function doSomething2():
        performMethod2()
        counter += 1

    function performMethod1(): ...
    function performMethod2(): ...