PHP Design Patterns .

PHP Design Patterns Chain of Responsibility

About the Chain of Responsibility

A method called in one object will move up a chain of objects until one is found that can properly handle the call.


AbstractBookTopic.php

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
  
  abstract class AbstractBookTopic {

abstract function getTopic(); abstract function getTitle(); abstract function setTitle($title_in);

}
To download source right-click here and "Save As...".

BookTopic.php

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
  
  class BookTopic extends AbstractBookTopic {

private $topic; private $title;

function __construct($topic_in) { $this->topic = $topic_in; $this->title = NULL; }

function getTopic() {return $this->topic;}

//this is the end of the chain - returns title or says there is none function getTitle() { if (NULL != $this->title) { return $this->title; } else { return 'there is no title avaialble'; } } function setTitle($title_in) {$this->title = $title_in;}

}
To download source right-click here and "Save As...".

BookSubTopic.php

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
  
  class BookSubTopic extends AbstractBookTopic {

private $topic; private $parentTopic; private $title;

function __construct($topic_in, BookTopic $parentTopic_in) { $this->topic = $topic_in; $this->parentTopic = $parentTopic_in; $this->title = NULL; }

function getTopic() {return $this->topic;}

function getParentTopic() {return $this->parentTopic;}

function getTitle() { if (NULL != $this->title) { return $this->title; } else { return $this->parentTopic->getTitle(); } } function setTitle($title_in) {$this->title = $title_in;}

}
To download source right-click here and "Save As...".

BookSubSubTopic.php

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
  
  class BookSubSubTopic extends AbstractBookTopic {

private $topic; private $parentTopic; private $title;

function __construct($topic_in, BookSubTopic $parentTopic_in) { $this->topic = $topic_in; $this->parentTopic = $parentTopic_in; $this->title = NULL; }

function getTopic() {return $this->topic;}

function getParentTopic() {return $this->parentTopic;}

function getTitle() { if (NULL != $this->title) { return $this->title; } else { return $this->parentTopic->getTitle(); } } function setTitle($title_in) {$this->title = $title_in;}

}
To download source right-click here and "Save As...".


testChainOfResponsibility.php

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved

include_once('AbstractBookTopic.php'); include_once('BookTopic.php'); include_once('BookSubTopic.php'); include_once('BookSubSubTopic.php');

writeln("BEGIN TESTING CHAIN OF RESPONSIBILITY PATTERN"); writeln("");

$bookTopic = new BookTopic("PHP 5"); writeln("bookTopic before title is set:"); writeln("topic: " . $bookTopic->getTopic()); writeln("title: " . $bookTopic->getTitle()); writeln(""); $bookTopic->setTitle( "PHP 5 Recipes by Babin, Good, Kroman, and Stephens"); writeln("bookTopic after title is set: "); writeln("topic: " . $bookTopic->getTopic()); writeln("title: " . $bookTopic->getTitle()); writeln(""); $bookSubTopic = new BookSubTopic("PHP 5 Patterns",$bookTopic); writeln("bookSubTopic before title is set: "); writeln("topic: " . $bookSubTopic->getTopic()); writeln("title: " . $bookSubTopic->getTitle()); writeln(""); $bookSubTopic->setTitle( "PHP 5 Objects Patterns and Practice by Zandstra"); writeln("bookSubTopic after title is set: "); writeln("topic: ". $bookSubTopic->getTopic()); writeln("title: ". $bookSubTopic->getTitle()); writeln(""); $bookSubSubTopic = new BookSubSubTopic("PHP 5 Patterns for Cats", $bookSubTopic); writeln("bookSubSubTopic with no title set: "); writeln("topic: " . $bookSubSubTopic->getTopic()); writeln("title: " . $bookSubSubTopic->getTitle()); writeln(""); $bookSubTopic->setTitle(NULL); writeln( "bookSubSubTopic with no title for set for bookSubTopic either:"); writeln("topic: " . $bookSubSubTopic->getTopic()); writeln("title: " . $bookSubSubTopic->getTitle()); writeln("");

writeln("END TESTING CHAIN OF RESPONSIBILITY PATTERN");

function writeln($line_in) { echo $line_in."<"."BR".">"; }
To download source right-click here and "Save As...".

output of testDecorator.php

BEGIN TESTING CHAIN OF RESPONSIBILITY PATTERN

bookTopic before title is set: topic: PHP 5 title: there is no title avaialble

bookTopic after title is set: topic: PHP 5 title: PHP 5 Recipes by Babin, Good, Kroman, and Stephens

bookSubTopic before title is set: topic: PHP 5 Patterns title: PHP 5 Recipes by Babin, Good, Kroman, and Stephens

bookSubTopic after title is set: topic: PHP 5 Patterns title: PHP 5 Objects Patterns and Practice by Zandstra

bookSubSubTopic with no title set: topic: PHP 5 Patterns for Cats title: PHP 5 Objects Patterns and Practice by Zandstra

bookSubSubTopic with no title for set for bookSubTopic either: topic: PHP 5 Patterns for Cats title: PHP 5 Recipes by Babin, Good, Kroman, and Stephens

END TESTING CHAIN OF RESPONSIBILITY PATTERN

References


Design Patterns
Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides

PHP 5
The Official PHP web site
Core PHP Programming, 3rd Edition by Leon Atkinson and Zeev Suraski
Comments
Sign in to be the first to comment on PHP Design Patterns Chain of Responsibility.