您的位置:首页 > 编程语言 > PHP开发

php设计模式 Command(命令模式)

2011-11-13 09:24 1086 查看
简介:这是php设计模式 Command(命令模式)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338753' scrolling='no'>
1 <?php
2 /**
3  * 命令模式
4  *
5  * 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
6  */
7 interface Command
8 {
9     public function execute();
10 }
11
12 class Invoker
13 {
14     private $_command = array();
15     public function setCommand($command) {
16         $this->_command[] = $command;
17     }
18
19     public function executeCommand()
20     {
21         foreach($this->_command as $command)
22         {
23             $command->execute();
24         }
25     }
26
27     public function removeCommand($command)
28     {
29         $key = array_search($command, $this->_command);
30         if($key !== false)
31         {
32             unset($this->_command[$key]);
33         }
34     }
35 }
36
37 class Receiver
38 {
39     private $_name = null;
40
41     public function __construct($name) {
42         $this->_name = $name;
43     }
44
45     public function action()
46     {
47         echo $this->_name." action<br/>";
48     }
49
50     public function action1()
51     {
52         echo $this->_name." action1<br/>";
53     }
54 }
55
56 class ConcreteCommand implements Command
57 {
58     private $_receiver;
59     public function __construct($receiver)
60     {
61         $this->_receiver = $receiver;
62     }
63
64     public function execute()
65     {
66         $this->_receiver->action();
67     }
68 }
69
70 class ConcreteCommand1 implements Command
71 {
72     private $_receiver;
73     public function __construct($receiver)
74     {
75         $this->_receiver = $receiver;
76     }
77
78     public function execute()
79     {
80         $this->_receiver->action1();
81     }
82 }
83
84 class ConcreteCommand2 implements Command
85 {
86     private $_receiver;
87     public function __construct($receiver)
88     {
89         $this->_receiver = $receiver;
90     }
91
92     public function execute()
93     {
94         $this->_receiver->action();
95         $this->_receiver->action1();
96     }
97 }
98
99
100 $objRecevier = new Receiver("No.1");
101 $objRecevier1 = new Receiver("No.2");
102 $objRecevier2 = new Receiver("No.3");
103
104 $objCommand = new ConcreteCommand($objRecevier);
105 $objCommand1 = new ConcreteCommand1($objRecevier);
106 $objCommand2 = new ConcreteCommand($objRecevier1);
107 $objCommand3 = new ConcreteCommand1($objRecevier1);
108 $objCommand4 = new ConcreteCommand2($objRecevier2); // 使用 Recevier的两个方法
109
110 $objInvoker = new Invoker();
111 $objInvoker->setCommand($objCommand);
112 $objInvoker->setCommand($objCommand1);
113 $objInvoker->executeCommand();
114 $objInvoker->removeCommand($objCommand1);
115 $objInvoker->executeCommand();
116
117 $objInvoker->setCommand($objCommand2);
118 $objInvoker->setCommand($objCommand3);
119 $objInvoker->setCommand($objCommand4);
120 $objInvoker->executeCommand();


爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具
http://biancheng.dnbcw.info/php/338753.html pageNo:9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: