gpt4 book ai didi

php - 简化巨大的 if 语句 - 设计模式?

转载 作者:可可西里 更新时间:2023-11-01 13:51:28 25 4
gpt4 key购买 nike

我可能有一组如下所示的 if 语句:

if (a and b and c and d) {
// do stuff
} else (!a and b and c and d) {
// do something else
} else (!a and !b and c and D) {
// do yet something else
} ...

等等所有可能的排列。

我想到了这样做:

switch ((a ? 'Y' : 'N') . (b ? 'Y' : 'N') . (c ? 'Y' : 'N') . (d ? 'Y' : 'N')) {

case 'YNYN':
// do stuff
break;

case 'NNNN':
// etc.
break;

}

有没有更好的办法?

最佳答案

我可能会做的(不知道细节)是为每个状态构建一系列类。然后将 doStuff 推送到该类:

class DoStuff { //The Client
protected $strategies = array();
public function addStrategy(iDoStuffStrategy $strategy) {
$this->strategies[] = $strategy;
}
public function doStuff ($a, $b, $c, $d) {
foreach ($this->strategies as $strategy) {
if ($strategy->test($a, $b, $c, $d)) {
return $strategy->doStuff();
}
}
throw new RuntimeException('Unhandleable Situation!');
}
}

interface iDoStuffStrategy {
// Return a bool if you can handle this situation
public function test($a, $b, $c, $d);
// Execute the implementation
public function doStuff();
}

然后,每个类看起来像这样:

public function StrategyFoo implements iDoStuffStrategy {
public function test($a, $b, $c, $d) {
return $a && $b && $c && $d;
}
public function doStuff() {
//DoStuff!
}
}
public function StrategyBar implements iDoStuffStrategy {
public function test($a, $b, $c, $d) {
return !$a && $b && $c && $d;
}
public function doStuff() {
//DoStuff!
}
}

它基本上是 Strategy Pattern 的一个实现.这样做可以让您分离出决策树。

关于php - 简化巨大的 if 语句 - 设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com