<?php
/**
* 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。
* 调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
*
* 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
* 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
*
*/
/**
* Interface Order
*/
interface Order
{
public function execute();
}
/**
* Class Stock
*/
Class Stock
{
private $name = 'ABC';
private $quantity = 10;
public function buy()
{
echo "Stock [ Name: {$this->name}, Quantity: {$this->quantity} ] bought" . PHP_EOL;
}
public function sell()
{
echo "Stock [ Name: {$this->name}, Quantity: {$this->quantity} ] sold" . PHP_EOL;
}
}
/**
* Class BuyStock
*/
Class BuyStock implements Order
{
private $abcStock;
public function __construct(Stock $abcStock)
{
$this->abcStock = $abcStock;
}
public function execute()
{
$this->abcStock->buy();
}
}
/**
* Class SellStock
*/
Class SellStock implements Order
{
private $abcStock;
public function __construct(Stock $abcStock)
{
$this->abcStock = $abcStock;
}
public function execute()
{
$this->abcStock->sell();
}
}
/**
* Class Broker
*/
class Broker
{
private $orderList;
public function takeOrder(Order $order)
{
$this->orderList[] = $order;
}
public function placeOrders()
{
foreach ($this->orderList as $order) {
$order->execute();
}
$this->orderList = null;
}
}
$abcStock = new Stock();
$broker = new Broker();
$buyStockOrder = new BuyStock($abcStock);
$sellStockOrder = new SellStock($abcStock);
$broker->takeOrder($buyStockOrder);
$broker->takeOrder($sellStockOrder);
$broker->placeOrders();
PHP-设计模式-命令模式
最新推荐文章于 2024-07-19 17:19:27 发布