pattern在php,命令模式(Command pattern)详解及PHP实现

命令模式是一种行为设计模式,它将请求封装为对象,使请求的发起者和执行者解耦。通过这种方式,系统可以灵活地调度请求,支持撤销操作,以及方便地记录请求日志。在该模式中,命令接口定义了通用操作,具体命令类实现这些操作,接收者执行实际业务逻辑。这种模式适用于在不同时间指定、排列和执行操作,以及需要事务管理的场景。
摘要由CSDN通过智能技术生成

命令模式是一种行为型模式,它将一个请求封装为一个对象,从而使用你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。

主要角色

命令(Command)角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。

具体命令(ConcreteCommand)角色:定义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执行方法。

客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。

请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。

接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

适用性

抽象出待执行的动作以参数化对象。Command模式是回调机制的一个面向对象的替代品。

在不同的时刻指定、排列和执行请求。

支持取消操作。

支持修改日志。

用构建在原语操作上的高层操作构造一个系统。Command模式提供了对事务进行建模的方法。Command有一个公共的接口,使得你可以用同一种方式调用所有的事务。同时使用该模式也易于添加新事务以扩展系统。

实例

interface Command { // 命令角色

public function execute(); // 执行方法

}

class ConcreteCommand implements Command { // 具体命令方法

private $_receiver;

public function __construct(Receiver $receiver) {

$this->_receiver = $receiver;

}

public function execute() {

$this->_receiver->action();

}

}

class Receiver { // 接收者角色

private $_name;

public function __construct($name) {

$this->_name = $name;

}

public function action() { }

}

class Invoker { // 请求者角色

private $_command;

public function __construct(Command $command) {

$this->_command = $command;

}

public function action() {

$this->_command->execute();

}

}

$receiver = new Receiver('hello world');

$command = new ConcreteCommand($receiver);

$invoker = new Invoker($command);

$invoker->action();

?>

优缺点

优点

命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分离开。

命令类与其他任何别的类一样,可以修改和推广。

可以把命令对象聚合在一起,合成为合成命令。

可以很容易的加入新的命令类。

缺点

可能会导致某些系统有过多的具体命令类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值