<?php
/**
* 需求基类
* Class RequestHelper
*/
class RequestHelper{}
/**
* 接口
* Class RequestProcess
*/
abstract class RequestProcess extends RequestHelper
{
abstract function process(RequestHelper $requestHelper);
}
/**
* 主进程
* Class MainProcess
*/
class MainProcess extends RequestProcess
{
public function process(RequestHelper $requestHelper){
print __CLASS__.":doing something useful request \n";
}
}
/**
* 进程装饰器 (委托类)
* Class DecorateProcess
*/
abstract class DecorateProcess extends RequestProcess
{
protected $requestProcess;
public function __construct(RequestProcess $requestProcess){
$this->requestProcess = $requestProcess;
}
}
/**
* 日志请求进程继承装饰器实现装饰器继承的抽象类的抽象方法
* Class LogRequest
*/
class LogRequest extends DecorateProcess
{
public function process(RequestHelper $requestHelper){
print __CLASS__.":logging request\n";
$this->requestProcess->process($requestHelper);
}
}
/**
* 用户验证请求进程继承装饰器实现装饰器继承的抽象类的抽象方法
* Class AuthenticateRequest
*/
class AuthenticateRequest extends DecorateProcess
{
public function process(RequestHelper $requestHelper){
print __CLASS__.":authenticate request \n";
$this->requestProcess->process($requestHelper);
}
}
/**
*
* Class StructureRequest
*/
class StructureRequest extends DecorateProcess
{
public function process(RequestHelper $requestHelper){
print __CLASS__.":structure request\n";
$this->requestProcess->process($requestHelper);
}
}
//client
$process = new LogRequest(new AuthenticateRequest(new StructureRequest(new MainProcess())));
$process->process(new RequestHelper());
/**
LogRequest:logging request
AuthenticateRequest:authenticate request
StructureRequest:structure request
MainProcess:doing something useful request
*/
【设计模式】之装饰器模式-PHP
最新推荐文章于 2023-04-25 15:16:56 发布