Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Chain-of-Responsibility-Programmiermodell

PHP-Chain-of-Responsibility-Programmiermodell

*文
*文Original
2017-12-27 14:32:371419Durchsuche

In diesem Artikel wird hauptsächlich das Chain-of-Responsibility-Programmiermodell von PHP vorgestellt, bei dem es sich auch um eine von Entwicklungsteams weit verbreitete Programmierkonvention handelt. Ich hoffe, es hilft allen.

Übersicht
Das Chain-of-Responsibility-Muster ist ein Objektverhaltensmuster. Im Chain-of-Responsibility-Muster sind viele Objekte durch den Verweis jedes Objekts auf seinen Nachkommen zu einer Kette verbunden. Die Anfrage wird in der Kette nach oben weitergeleitet, bis ein Objekt in der Kette beschließt, die Anfrage zu bearbeiten. Der Client, der die Anfrage gestellt hat, weiß nicht, welches Objekt in der Kette die Anfrage letztendlich bearbeitet, was es dem System ermöglicht, Verantwortlichkeiten dynamisch neu zu organisieren und zuzuweisen, ohne dass sich dies auf den Client auswirkt


Die Definition des Chain-of-Responsibility-Musters
gibt mehreren Objekten die Möglichkeit, Anfragen zu verarbeiten, wodurch die Kopplungsbeziehung zwischen Sender und Empfänger der Anfrage vermieden und diese Objekte zu einer Kette verbunden werden und die Anfrage entlang dieser weitergeleitet wird Kette, bis ein Objekt sie verarbeitet.

Vorteile des Chain-of-Responsibility-Modells
Der größte Vorteil besteht in der Trennung von Anfragen und Bearbeitung. Der Anforderer muss nicht wissen, wer die Anfrage bearbeitet, und der Prozessor muss nicht die gesamte Anfrage kennen. Beide sind entkoppelt, was die Flexibilität des Systems verbessert.

Nachteile des Chain-of-Responsibility-Modells
Das erste ist das Leistungsproblem, das vom Anfang der Kette bis zum Ende der Kette durchlaufen wird relativ lang, Leistung ist eine Frage. Zweitens ist das Debuggen nicht sehr praktisch, insbesondere wenn die Kette relativ lang ist und viele Glieder hat. Aufgrund der Verwendung einer rekursiven Methode kann die Logik beim Debuggen komplizierter sein.


Die am Chain-of-Responsibility-Modell beteiligten Rollen sind wie folgt:

Abstrakter Handler (Handler) Rolle: Definieren Sie eine Anfrage Verarbeitungsschnittstelle. Bei Bedarf kann die Schnittstelle eine Methode definieren, um einen Verweis auf die nächste Schnittstelle festzulegen und zurückzugeben. Diese Rolle wird normalerweise durch eine abstrakte PHP-Klasse oder -Schnittstelle implementiert. Die Aggregationsbeziehung der Handler-Klasse in der obigen Abbildung gibt den Verweis der spezifischen Unterklasse auf das nächste Zuhause an. Die abstrakte Methode handleRequest() standardisiert die Operation der Unterklasse zur Verarbeitung der Anforderung
Spezifische Handlerrolle (ConcreateHandle): Die Ein bestimmter Handler empfängt die Anfrage. Schließlich können Sie wählen, ob die Anfrage bearbeitet oder an die nächste Partei weitergeleitet werden soll. Da der spezifische Prozessor einen Verweis auf den nächsten Prozessor enthält, kann der spezifische Prozessor bei Bedarf den nächsten Prozessor besuchen


, um ein PHP-Chain-of-Responsibility-Modell-Programmierbeispiel zu sehen:

  <?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(); 
  ?>

Wie aus dem Code ersichtlich ist, erstellt der Client zwei Handlerobjekte und gibt an, dass das nächste Zuhause des ersten Handlerobjekts das zweite Handlerobjekt ist, das zweite Handlerobjekt jedoch nicht das nächste Zuhause. Der Client übergibt die Anfrage dann an das erste Handlerobjekt

Verwandte Empfehlungen:

PHP State Mode Programming

PHP-Singleton-Musterimplementierung

PHP-Factory-Methodenmuster

Das obige ist der detaillierte Inhalt vonPHP-Chain-of-Responsibility-Programmiermodell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn