책임 체인 패턴은 프로세서가 요청을 처리 할 수있을 때까지 프로세싱 체인을 따라 요청을 전달할 수있는 행동 설계 패턴입니다. 이러한 방식으로, 다른 프로세서를 분리 할 수있는 반면, 처리 체인을 동적으로 변경하거나 새로운 프로세서를 추가 할 수 있습니다.
PHP에서 객체 지향 프로그래밍을 사용하면 책임 체인 패턴을 더 잘 구현할 수 있습니다. 다음은 간단한 예제 코드를 통해이 패턴의 구현 방법을 보여줍니다.
먼저 모든 콘크리트 핸들러의 추상 클래스`핸들러 '를 기본 클래스로 정의해야합니다. 이 클래스에는 요청을 처리하기위한 메소드`handle ()`및 다음 핸들러를 설정하기위한`setnext ()`메소드가 포함됩니다.
abstract class Handler {
protected $nextHandler;
public function setNext(Handler $handler) {
$this->nextHandler = $handler;
}
abstract public function handle(Request $request);
}
다음으로, 우리는 특정 핸들러 클래스를 생성하고`handler '클래스에서 상속 받고`handle ()`메소드를 구현합니다. 처리 로직에서 현재 프로세서가 요청을 처리 할 수없는 경우 요청을 다음 프로세서로 전달합니다.
class ConcreteHandler1 extends Handler {
public function handle(Request $request) {
if ($request->getType() == 'type1') {
echo "Handled by ConcreteHandler1";
} else {
if ($this->nextHandler) {
$this->nextHandler->handle($request);
} else {
echo "No handler can handle the request";
}
}
}
}
우리는 다른 특정 프로세서 클래스`ConcreteHandler2 '를 만듭니다.이 프로세서 핸들러는`ConcreteHandler1'과 다른 유형의 요청을 처리합니다. `ConcreteHandler1 '의 다음 핸들러로 설정하십시오.
class ConcreteHandler2 extends Handler {
public function handle(Request $request) {
if ($request->getType() == 'type2') {
echo "Handled by ConcreteHandler2";
} else {
if ($this->nextHandler) {
$this->nextHandler->handle($request);
} else {
echo "No handler can handle the request";
}
}
}
}
요청 정보를 프로세서에 전달하려면 요청 된 데이터를 캡슐화하려면 '요청'클래스가 필요합니다. 처리 체인에서 전달 요청의 유형 정보가 포함되어 있습니다.
class Request {
protected $type;
public function __construct($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
마지막으로 책임 체인 모델의 구현을 테스트 할 수 있습니다. 먼저 요청 객체를 작성한 다음 두 개의 프로세서 객체를 작성하고 그 사이에 처리 체인을 설정하십시오. 그런 다음 요청을 첫 핸들러에게 전달하고 처리 프로세스를 확인하십시오.
$request = new Request('type2');
$handler1 = new ConcreteHandler1();
$handler2 = new ConcreteHandler2();
$handler1->setNext($handler2);
$handler1->handle($request);
위의 코드를 실행하면 출력은 다음과 같습니다.
ConcreteHandler2에 의해 처리됩니다
테스트 코드에서 볼 수 있듯이 요청 유형이 'type2'인 경우`ConcreteHandler2 '는 요청을 처리 할 수 있으므로 "ConcreteHandler2로 처리 된"은 출력입니다. 요청 유형이 'type1'인 경우`ConcreteHandler1 '은 요청을 처리 할 수 없으므로 요청이`ConcreteHandler2'로 전달되고 다음 핸들러가 없으면 "핸들러가 요청을 처리 할 수 없습니다".
책임 체인 모델은 객체 지향 프로그래밍을 통해 유연한 요청 처리 방법을 제공합니다. 요청을 처리 할 때 각 프로세서는 처리 할 수있는 요청 유형에만 관심이 있습니다. 처리 할 수없는 경우 요청은 다음 프로세서로 넘겨집니다. 이 모드는 각 프로세서를 효과적으로 분해하여 시스템의 확장 성 및 유지 보수를 향상시킵니다.