21,891
社区成员
发帖
与我相关
我的任务
分享head first 设计模式里面是用JAVA来实现的,由于现在从事PHP工作,所以用PHP重写书本上的代码以便应用在以后的实际工作中,经验尚浅,不当之处请各位斧正。
1. <?php
2. /*
3. * author 落寞三少
4. * email nickylans@163.com
5. * qq 398504533
6. *
7. */
8. abstract class Duck {
9. public $flyBehavior;
10. public $quackBehavior;
11. function display(){}
12.
13. public function performFly(){
14. $this->flyBehavior->fly();
15. }
16.
17. public function performQuack(){
18. $this->quackBehavior->quack();
19. }
20.
21. public function swim(){
22. echo '所有DUCK都会FLOAT';
23. }
24.
25. public function setFlyBehavior($fb){
26. $this->flyBehavior = $fb;
27. }
28.
29. public function setQuackBehavior($qb){
30. $this->quackBehavior = $qb;
31. }
32. }
33. interface FlyBehavior {
34. public function fly();
35. }
36. interface QuackBehavior {
37. public function quack();
38. }
39. class FlyWithWings implements FlyBehavior {
40. public function fly(){
41. echo 'I am flying!!';
42. }
43. }
44. class FlyNoWay implements FlyBehavior {
45. public function fly(){
46. echo 'I can\'t fly!';
47. }
48. }
49. class FlyRocketPowered implements FlyBehavior {
50. public function fly(){
51. echo 'I am flying with a rocket!';
52. }
53. }
54. class Quack implements QuackBehavior {
55. public function quack(){
56. echo 'guagua';
57. }
58. }
59. class MuteQuack implements QuackBehavior {
60. public function quack(){
61. echo 'silence';
62. }
63. }
64. class Squeak implements QuackBehavior {
65. public function quack(){
66. echo 'squeak';
67. }
68. }
69. //////////////////////////////////
70. class MallardDuck extends Duck {
71. public function __construct(){
72. $this->quackBehavior = new Quack();
73. $this->flyBehavior = new FlyWithWings();
74. }
75. public function display(){
76. echo 'I am a real Mallard duck!';
77. }
78. }
79.
80. $mallardduck = new MallardDuck();
81. $mallardduck->display();
82. echo '<br />';
83. $mallardduck->performQuack();
84. echo '<br />';
85. $mallardduck->setFlyBehavior(new FlyRocketPowered());
86. echo '<br />';
87. $mallardduck->performFly();
?>