이 글에서는 개발팀에서 널리 사용하는 프로그래밍 규칙이기도 한 PHP의 책임 사슬 프로그래밍 모델을 주로 소개합니다. 그것이 모두에게 도움이 되기를 바랍니다.
개요
책임 사슬 패턴은 객체 행동 패턴입니다. 책임 사슬 패턴에서는 많은 객체가 하위 객체에 대한 각 객체의 참조에 의해 연결되어 체인을 형성합니다. 요청은 체인의 개체가 요청을 처리하기로 결정할 때까지 체인 위로 전달됩니다. 요청한 클라이언트는 요청을 최종적으로 처리하는 체인의 어떤 개체인지 알 수 없으므로 시스템은 클라이언트에 영향을 주지 않고 동적으로 책임을 재구성하고 할당할 수 있습니다.
책임 체인 패턴 정의
여러 개 제공 요청을 처리할 수 있는 기회에 반대하여 요청의 송신자와 수신자 간의 결합 관계를 피하고 이러한 객체를 체인으로 연결하고 객체가 이를 처리할 때까지 이 체인을 따라 요청을 전달합니다.
책임 사슬 모델의 장점
가장 중요한 장점은 요청과 처리를 분리한다는 것입니다. 요청자는 누가 요청을 처리하는지 알 필요가 없으며 프로세서는 전체 요청을 알 필요가 없습니다. 이 두 가지가 분리되어 시스템의 유연성이 향상됩니다.
책임 체인 모델의 단점
첫 번째는 성능 문제입니다. 각 요청은 체인의 선두에서 체인의 끝까지 이동합니다. 특히 체인이 상대적으로 길면 성능이 문제가 됩니다. 둘째, 디버깅은 그리 편리하지 않습니다. 특히 체인이 비교적 길고 재귀적 방법을 사용하기 때문에 디버깅 중에 논리가 더 복잡해질 수 있습니다.
책임 사슬 모델에 관련된 역할은 다음과 같습니다.
추상 핸들러(Handler) 역할: 요청을 처리하기 위한 인터페이스를 정의합니다. 필요한 경우 인터페이스는 다음 인터페이스에 대한 참조를 설정하고 반환하는 메서드를 정의할 수 있습니다. 이 역할은 일반적으로 PHP 추상 클래스 또는 인터페이스에 의해 구현됩니다. 위 그림에서 Handler 클래스의 집합 관계는 특정 서브클래스의 참조를 다음 홈에 제공합니다. 추상 메소드인 handlerRequest()는 요청을 처리하기 위해 서브클래스의 동작을 표준화합니다. 특정 핸들러(ConcreateHandle) 역할: 특정 핸들러 이후. 요청을 받으면 요청을 처리하거나 다음 당사자에게 전달하도록 선택할 수 있습니다. 특정 프로세서는 다음 홈에 대한 참조를 보유하므로 필요한 경우 특정 처리는 다음 홈에 액세스할 수 있습니다.
PHP 책임 체인 모델 프로그래밍 예를 살펴보겠습니다.
<?php /** * 抽象处理者角色 * @author wzy * */ abstract class Handle { /** * 持有后继的责任对象 * * @var object */ protected $successor; /** * 示意处理请求的方法,虽然这个示意方法是没有传入参素的 * 但实际是可以传入参数的,根据具体需要来选择是否传递参数 */ public abstract function handleRequest (); /** * 取值方法 * * @return object */ public function getSuccessor () { return $this->successor; } /** * 赋值方法,设置后继的责任对象 * * @param object $objsuccessor */ public function setSuccessor ($objsuccessor) { $this->successor = $objsuccessor; } } /** * 具体处理者角色 * * @author wzy * */ class ConcreateHandler extends Handle { /** * 判断是否有后继的责任对象 * 如果有,就转发请求给后继的责任对象 * 如果没有,则处理请求 * * @see Handle::handleRequest() */ public function handleRequest () { if ($this->getSuccessor() != null) { echo "放过请求,将请求转发给后继的责任对象!<br>"; $this->getSuccessor()->handleRequest(); } else { echo "处理请求,处理过程省略...<br>"; } } } /** * 客户端代码 */ // 组装责任链 $handle1 = new ConcreateHandler(); $handle2 = new ConcreateHandler(); $handle1->setSuccessor($handle2); // 提交请求 $handle1->handleRequest(); ?>다음 코드에서 볼 수 있습니다. 클라이언트 두 개의 핸들러 객체가 생성되고 첫 번째 핸들러 객체의 다음 핸들러 객체가 두 번째 핸들러 객체로 지정되었지만 두 번째 핸들러 객체에는 다음 핸들러 객체가 없습니다. 그런 다음 클라이언트는 요청을 첫 번째 핸들러 객체
관련 권장 사항:
위 내용은 PHP 책임 체인 프로그래밍 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!