책임 사슬 모델
원칙: 솔직히 말하면, 스스로 처리할 수 없다면 상사에게 맡기는 것입니다. 이러한 접근 방식을 책임 사슬 모델이라고 합니다.
적용 시나리오: OA 관리 시스템에서 휴가를 요청합니다. 포럼 보고서.
<code><form action=<span>'make.php'</span><span>method</span>=<span>'post'</span>> <select name=<span>'lev'</span>> <<span>option</span><span>value</span>=<span>'1'</span>>脏话</<span>option</span>> <<span>option</span><span>value</span>=<span>'2'</span>>黄赌毒</<span>option</span>> <<span>option</span><span>value</span>=<span>'3'</span>>反动国家</<span>option</span>> </select> <inout <span><span>type</span>=</span><span>'submit'</span><span>value</span>=<span>'举报'</span>> </form></code>
make.php
<code><span><span><?php</span><span>//版主权限</span><span><span>class</span><span>admin</span>{</span><span>protected</span><span>$power</span>=<span>'1'</span>; <span>protected</span><span>$top</span> = <span>'submits'</span>; <span>public</span><span><span>function</span><span>make</span><span>(<span>$lev</span>)</span>{</span><span>if</span>(<span>$lev</span><=<span>$this</span>->power){ <span>echo</span><span>'删帖子'</span>; }<span>else</span>{ <span>$topObj</span> = <span>new</span><span>$this</span>->top; <span>$topObj</span>->make(<span>$lev</span>); } } } <span>//管理员权限</span><span><span>class</span><span>submits</span>{</span><span>protected</span><span>$power</span>=<span>'3'</span>; <span>protected</span><span>$top</span> = <span>'police'</span>; <span>public</span><span><span>function</span><span>make</span><span>(<span>$lev</span>)</span>{</span><span>if</span>(<span>$lev</span><=<span>$this</span>->power){ <span>echo</span><span>'禁止用户发言'</span>; }<span>else</span>{ <span>$topObj</span> = <span>new</span><span>$this</span>->top; <span>$topObj</span>->make(<span>$lev</span>); } } } <span>//警察权限</span><span>//责任链最高层(可以不用判断,责任链模式必须要用到最高一层)</span><span><span>function</span><span>police</span>{</span><span><span>function</span><span>make</span><span>(<span>$lev</span>)</span>{</span><span>echo</span><span>'教育处理'</span>; } } <span>//一般是判断权限再去调用区中的类去处理</span><span>//这里的责任链模式</span><span>$lev</span> = <span>$_POST</span>[<span>'lev'</span>]; <span>$adminObj</span> = <span>new</span> admin(); <span>$adminObj</span>->make(<span>$lev</span>); <span>?></span></span></span></code>
장점:
단점:
요약:
책임 사슬 패턴에서는 많은 객체가 다음 상위 객체에 대한 각 객체의 참조에 의해 연결되어 체인을 형성합니다. 요청은 체인의 개체가 요청을 처리하기로 결정할 때까지 체인 위로 전달됩니다. 요청을 하는 클라이언트는 체인의 어떤 개체가 최종적으로 요청을 처리하는지 알지 못하므로 시스템은 클라이언트에 영향을 주지 않고 체인을 동적으로 재구성하고 책임을 할당할 수 있습니다.
책임 사슬 모델의 가장 큰 장점은 시스템의 결합을 줄이고 개체의 상호 연결을 단순화하며 동시에 개체에 책임을 할당하는 유연성을 높일 수 있다는 것입니다. 새로운 요청 처리 클래스를 추가하면 가장 큰 단점은 요청이 수신될 것이라는 보장이 없으며 상대적으로 긴 책임 체인의 경우 요청 처리에 여러 처리 개체가 포함될 수 있으며 시스템 성능이 특정 개체에 영향을 미칠 수 있다는 것입니다. 범위이며, 코드를 디버깅할 때 불편할 것입니다.
책임 사슬 모델의 적용 가능한 상황은 다음과 같습니다. 여러 개체가 동일한 요청을 처리할 수 있으며 요청을 처리하는 개체는 수신자가 명시적으로 지정되지 않은 경우 런타임에 자동으로 결정됩니다. 여러 개체가 제출됩니다. 요청을 처리하기 위해 개체 집합을 동적으로 지정할 수 있습니다.
').addClass('사전 번호 매기기').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });위에서 내용의 측면을 포함하여 PHP 디자인 패턴의 책임 사슬 모델에 대해 간략하게 설명했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.