다단계 캐싱 책임 체인 모델.
* 클라이언트는 이를 핸들러에 제출하고, 핸들러는 작업을 처리할 수 있는 책임 체인에서 함수를 찾아 이를 처리합니다. 다음과 같이 요약할 수 있습니다. 일련의 클래스를 사용하여 요청 처리를 시도합니다. 이들 클래스 사이에는 느슨한 결합이 있습니다. 유일한 공통점은 요청이 들어오면 클래스 A가 이를 먼저 처리한다는 것입니다. 처리를 위해 클래스 B. 처리되지 않으면 처리를 위해 클래스 C로 전달됩니다.
/**
* 책임 패턴 체인, 그 목적은 메소드 호출과 같은 요청을 처리하기 위해 객체 체인을 구성하는 것입니다.
*
* 책임 사슬의 가장 유명한 예: 다중 레벨 캐싱.
* 클라이언트는 이를 핸들러에 제출하고, 핸들러는 작업을 처리할 수 있는 함수를 찾아서 처리합니다.
* 다음과 같이 요약할 수 있습니다. 요청을 처리하며, 이들 클래스 사이에는 느슨한 결합이 있습니다.
* 유일한 공통점은 요청이 오면 클래스 A가 먼저 처리한다는 것입니다. 처리되지 않으면
* 처리를 위해 Class B로 전달됩니다. 그렇지 않은 경우 Class B로 처리됩니다. 처리를 위해 Class C로 전달되어 체인처럼 전달됩니다.
*/
/**
* 핸들러 추상화.
* ChainOfResponsibility의 일부가 되고 싶은 개체는 이 인터페이스를 직접 구현하거나
* AbstractHandler의 상속을 통해 구현해야 합니다.
* 책임 체인의 일부는 직접 구현해야 합니다. 이 인터페이스를 구현하거나
* 추상 처리 클래스를 상속합니다
*/
인터페이스 KeyValueStore{
/**
* 값을 얻습니다.
* @param string $key
* @return 혼합
*/
공용 함수 get($key);
}
/**
* ConcreteHandler가
* 캐싱에 관심이 없거나 검색 상속을 방해하는 기본 무작동 구현입니다.
* 요청을 받고 이를 만족시키려고 시도하며 실패하면 다음 핸들러에 위임합니다.
*/
추상 클래스 AbstractKeyValueStore가 KeyValueStore를 구현합니다.{
protected $_nextHandler;
공개 함수 get($key){
return $this->_nextHandler->get($key);
}
}
/**
* 이상적으로는 체인의 마지막 ConcreteHandler입니다.
* 체인에 삽입하면 호출되는 마지막 노드가 됩니다.
* 이상적으로는 책임 체인의 마지막 구체적인 핸들러 클래스입니다. 체인에 추가된 은 마지막으로 호출되는 노드가 됩니다.