以下是一个简单的 PHP 责任链模式的示例:
<?php
// 处理者接口
interface Handler {
public function handleRequest($request);
}
// 具体处理者1
class ConcreteHandler1 implements Handler {
private $successor;
public function setSuccessor(Handler $successor) {
$this->successor = $successor;
}
public function handleRequest($request) {
if ($request == "Type1") {
echo "ConcreteHandler1 handles the request.\n";
} elseif ($this->successor !== null) {
// 转发请求给下一个处理者
$this->successor->handleRequest($request);
} else {
echo "ConcreteHandler1 cannot handle the request.\n";
}
}
}
// 具体处理者2
class ConcreteHandler2 implements Handler {
private $successor;
public function setSuccessor(Handler $successor) {
$this->successor = $successor;
}
public function handleRequest($request) {
if ($request == "Type2") {
echo "ConcreteHandler2 handles the request.\n";
} elseif ($this->successor !== null) {
// 转发请求给下一个处理者
$this->successor->handleRequest($request);
} else {
echo "ConcreteHandler2 cannot handle the request.\n";
}
}
}
// 客户端代码
$handler1 = new ConcreteHandler1();
$handler2 = new ConcreteHandler2();
$handler1->setSuccessor($handler2);
// 向第一个处理者发送请求
$handler1->handleRequest("Type1");
$handler1->handleRequest("Type2");
$handler1->handleRequest("Type3");
在这个例子中,Handler 接口定义了处理者的基本方法,具体处理者 ConcreteHandler1 和 ConcreteHandler2 实现了这个接口。每个具体处理者都可以处理一种类型的请求,并在处理完成后将请求传递给下一个处理者。
客户端代码创建了两个具体处理者,并将它们连接成一个链,然后通过第一个处理者向链中发送请求。责任链模式允许请求沿着链传递,直到找到能够处理请求的处理者。
责任链模式的优点在于它能够解耦发送者和接收者,使得系统更灵活,并且可以动态地调整处理链。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11952/PHP