Skip to content

Commit bdf8c49

Browse files
author
Dominik Liebler
authored
Merge pull request DesignPatternsPHP#280 from vuurball/master
Specification pattern - performance optimization
2 parents c3116c9 + eb847fb commit bdf8c49

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

Behavioral/Specification/AndSpecification.php

+7-4
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ public function __construct(SpecificationInterface ...$specifications)
1717
$this->specifications = $specifications;
1818
}
1919

20+
/**
21+
* if at least one specification is false, return false, else return true.
22+
*/
2023
public function isSatisfiedBy(Item $item): bool
2124
{
22-
$satisfied = [];
23-
2425
foreach ($this->specifications as $specification) {
25-
$satisfied[] = $specification->isSatisfiedBy($item);
26+
if (!$specification->isSatisfiedBy($item)) {
27+
return false;
28+
}
2629
}
2730

28-
return !in_array(false, $satisfied);
31+
return true;
2932
}
3033
}

Behavioral/Specification/OrSpecification.php

+7-5
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@ public function __construct(SpecificationInterface ...$specifications)
1717
$this->specifications = $specifications;
1818
}
1919

20+
/**
21+
* if at least one specification is true, return true, else return false
22+
*/
2023
public function isSatisfiedBy(Item $item): bool
2124
{
22-
$satisfied = [];
23-
2425
foreach ($this->specifications as $specification) {
25-
$satisfied[] = $specification->isSatisfiedBy($item);
26+
if ($specification->isSatisfiedBy($item)) {
27+
return true;
28+
}
2629
}
27-
28-
return in_array(true, $satisfied);
30+
return false;
2931
}
3032
}

0 commit comments

Comments
 (0)