0
点赞
收藏
分享

微信扫一扫

设计模式之命令模式 ,Php高级编程

往复随安_5bb5 04-01 08:00 阅读 3

好的,以下是一个简单的命令模式的 PHP 示例代码:

```php
<?php
// 命令接收者(Invoker)
class Invoker {
    private $command;

    public function __construct(Command $command) {
        $this->command = $command;
    }

    public function execute() {
        $this->command->execute();
    }
}

// 抽象命令(Command)
abstract class Command {
    protected $receiver;

    public function __construct(Receiver $receiver) {
        $this->receiver = $receiver;
    }

    abstract public function execute();
}

// 具体命令(ConcreteCommand)
class ConcreteCommand extends Command {
    public function execute() {
        $this->receiver->action();
    }
}

// 命令执行者(Receiver)
class Receiver {
    public function action() {
        echo "命令执行了!".PHP_EOL;
    }
}

// 使用示例
// 创建命令执行者对象
$receiver = new Receiver();
// 创建具体命令对象并传入命令执行者对象
$command = new ConcreteCommand($receiver);
// 创建命令接收者对象并传入具体命令对象
$invoker = new Invoker($command);
// 执行命令
$invoker->execute();
?>
```

上述代码中,我们定义了一个命令接收者 `Invoker` ,它持有一个命令对象,并通过 `execute()` 方法来执行命令对象的 `execute()` 方法。抽象命令 `Command` 类有一个受保护的属性 `$receiver`,用于存储命令执行者对象。具体命令 `ConcreteCommand` 类继承自抽象命令类,并实现了 `execute()` 方法,它会调用命令执行者对象的 `action()` 方法。命令执行者 `Receiver` 类有一个 `action()` 方法,用于执行具体的操作。

在使用示例中,我们首先创建了一个命令执行者对象 `$receiver`,然后创建了一个具体命令对象 `$command`,并将命令执行者对象传递给具体命令对象的构造函数。接下来,我们创建了一个命令接收者对象 `$invoker`,并将具体命令对象传递给命令接收者对象的构造函数。最后,我们通过调用命令接收者对象的 `execute()` 方法来执行命令。

希望这段代码能够帮助到你,如果你还有其他疑问,请随时向我提问。

在命令模式的演示代码中加入宏命令(也就是命令集合)可以通过定义一个命令集合类来实现。下面是一个示例代码,展示了如何在命令模式中加入命令集合:

```php
<?php
// 命令接收者(Invoker)
class Invoker {
    private $commands;

    public function __construct() {
        $this->commands = [];
    }

    public function addCommand(Command $command) {
        $this->commands[] = $command;
    }

    public function executeCommands() {
        foreach ($this->commands as $command) {
            $command->execute();
        }
    }
}

// 抽象命令(Command)
abstract class Command {
    protected $receiver;

    public function __construct(Receiver $receiver) {
        $this->receiver = $receiver;
    }

    abstract public function execute();
}

// 具体命令(ConcreteCommand)
class ConcreteCommand extends Command {
    public function execute() {
        $this->receiver->action();
    }
}

// 命令执行者(Receiver)
class Receiver {
    public function action() {
        echo "命令执行了!".PHP_EOL;
    }
}

// 使用示例
// 创建命令执行者对象
$receiver = new Receiver();
// 创建具体命令对象
$command1 = new ConcreteCommand($receiver);
$command2 = new ConcreteCommand($receiver);
// 创建命令接收者对象
$invoker = new Invoker();
// 将命令添加到集合中
$invoker->addCommand($command1);
$invoker->addCommand($command2);
// 执行命令集合
$invoker->executeCommands();
?>
```

在这个示例中,我们对命令模式进行了一些修改。`Invoker` 类现在有一个命令集合 `$commands`,可以通过 `addCommand()` 方法添加命令对象。`executeCommands()` 方法遍历命令集合并执行每个命令。

在使用示例中,我们创建了两个具体命令对象 `$command1` 和 `$command2`,并将它们添加到命令接收者对象 `$invoker` 的命令集合中。然后,通过调用 `executeCommands()` 方法来执行命令集合。

这样,你就可以将多个命令组合在一起,形成一个命令集合,并在需要时一次性执行它们。这种方式可以更方便地管理和执行相关联的一组命令。

希望这个示例对你有所帮助!如果你还有其他问题或需要进一步的解释,请随时提问。

举报

相关推荐

0 条评论