我有两节课:
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?谢谢。
答案 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(): ...