命令鏈模式以松散耦合主題為基礎,發送消息、命令和請求,或通過一組處理程序發送任意內容。每個處理程序都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理程序,而不影響其他處理程序。
1.interface Validator
2.{
3. /**
4. * The method could have any parameters.
5. * @param mixed
6. * @return boolean
7. */
8. public function isValid($value);
9.}
10.
11./**
12. * ConcreteCommand.
13. */
14.class MoreThanZeroValidator implements Validator
15.{
16. public function isValid($value)
17. {
18. return $value > 0;
19. }
20.}
21.
22./**
23. * ConcreteCommand.
24. */
25.class EvenValidator implements Validator
26.{
27. public function isValid($value)
28. {
29. return $value % 2 == 0;
30. }
31.}
32.
33./**
34. * The Invoker. An implementation could store more than one
35. * Validator if needed.
36. */
37.class ArrayProcessor
38.{
39. protected $_rule;
40.
41. public function __construct (Validator $rule)
42. {
43. $this->_rule = $rule;
44. }
45.
46. public function process(array $numbers)
47. {
48. foreach ($numbers as $n) {
49. if ($this->_rule->IsValid($n)) {
50. echo $n, "\n";
51. }
52. }
53. }
54.}
55.
56.// Client code
57.$processor = new ArrayProcessor(new EvenValidator());
58.$processor->process(array(1, 20, 18, 5, 0, 31, 42));