-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChainOfResponsibilities.php
114 lines (114 loc) · 3.26 KB
/
ChainOfResponsibilities.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
class Request
{
protected $requestType;
public function setRequestType($requestType)
{
$this->requestType = $requestType;
}
public function getRequestType()
{
return $this->requestType;
}
protected $requestContent;
public function setRequestContent($requestContent)
{
$this->requestContent = $requestContent;
}
public function getRequestContent()
{
return $this->requestContent;
}
protected $number;
public function setNumber($number)
{
$this->number = $number;
}
public function getNumber()
{
return $this->number;
}
}
// salary raises
abstract class Manager
{
protected $name;
protected $superior;
function __construct($name)
{
$this->name = $name;
}
public function setSuperior($superior)
{
$this->superior = $superior;
}
//apply
abstract public function requestApplications(Request $request);
}
class CommonManager extends Manager
{
public function requestApplications(Request $request)
{
if ($request->getRequestType() === 'dayoff' && $request->getNumber() <=2)
{
echo $this->name.":".$request->getRequestContent()." times:".$request->getNumber()."\n";
} else {
if ($this->superior != null) {
$this->superior->requestApplications($request);
}
}
}
}
class MajaorManager extends Manager
{
public function requestApplications(Request $request)
{
if ($request->getRequestType() === 'dayoff' && $request->getNumber() <=5)
{
echo $this->name.":".$request->getRequestContent()." times:".$request->getNumber()."\n";
} else {
if ($this->superior != null) {
$this->superior->requestApplications($request);
}
}
}
}
class GeneralManager extends Manager
{
public function requestApplications(Request $request)
{
if ($request->getRequestType() === 'dayoff')
{
echo $this->name.":".$request->getRequestContent()." times:".$request->getNumber()."\n";
} else if ($request->getRequestType() === 'salary' && $request->getNumber() <= 500){
echo $this->name.":".$request->getRequestContent()." money:".$request->getNumber()."\n";
} else {
echo "no way!\n";
}
}
}
$jinli = new CommonManager('jinli');
$zongjian = new MajaorManager('zongjian');
$zhongjinli = new GeneralManager('zhongjinli');
$jinli->setSuperior($zongjian);
$zongjian->setSuperior($zhongjinli);
$request = new Request();
$request->setRequestType('dayoff');
$request->setRequestContent('xiaocai dayoff');
$request->setNumber(1);
$jinli->requestApplications($request);
$request2 = new Request();
$request2->setRequestType('dayoff');
$request2->setRequestContent('xiaocai dayoff');
$request2->setNumber(4);
$jinli->requestApplications($request2);
$request3 = new Request();
$request3->setRequestType('salary');
$request3->setRequestContent('xiaocai add salary');
$request3->setNumber(500);
$jinli->requestApplications($request3);
$request4 = new Request();
$request4->setRequestType('salary');
$request4->setRequestContent('xiaocai add salary');
$request4->setNumber(10000);
$jinli->requestApplications($request4);