PHP设计模式学习笔记: 责任链模式(Chain of Responsibility)
jopen
10年前
// 抽象书本类 abstract class AbstractBookTopic { abstract function getTopic(); abstract function getTitle(); abstract function setTitle($title_in); } // 书本类,继承自抽象书本类 class BookTopic extends AbstractBookTopic { private $topic; private $title; function __construct($topic_in) { $this->topic = $topic_in; $this->title = NULL; } function getTopic() { return $this->topic; } function getTitle() { if (NULL != $this->title) { return $this->title; } else { return '目前没有标题'; } } function setTitle($title_in) { $this->title = $title_in; } } // 子书本类,继承自抽象书本类 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; } } // 子子书本类,继承自抽象书本类 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; } } writeln("开始测试责任链模式"); writeln(""); $bookTopic = new BookTopic("魔法"); writeln("bookTopic设置标题前:"); writeln("主题: " . $bookTopic->getTopic()); writeln("标题: " . $bookTopic->getTitle()); writeln(""); $bookTopic->setTitle("哈利波特与魔法石"); writeln("bookTopic设置标题后: "); writeln("主题: " . $bookTopic->getTopic()); writeln("标题: " . $bookTopic->getTitle()); writeln(""); $bookSubTopic = new BookSubTopic("英国魔法", $bookTopic); writeln("bookSubTopic标题设置前: "); writeln("主题: " . $bookSubTopic->getTopic()); writeln("标题: " . $bookSubTopic->getTitle()); writeln(""); $bookSubTopic->setTitle("哈利波特与混血王子"); writeln("bookSubTopic标题设置后: "); writeln("主题: ". $bookSubTopic->getTopic()); writeln("标题: ". $bookSubTopic->getTitle()); writeln(""); $bookSubSubTopic = new BookSubSubTopic("英国现代魔法", $bookSubTopic); writeln("bookSubSubTopic标题设置前: "); writeln("主题: " . $bookSubSubTopic->getTopic()); writeln("标题: " . $bookSubSubTopic->getTitle()); writeln(""); $bookSubTopic->setTitle(NULL); writeln("bookSubSubTopic、 bookSubTopic都没有设置标题:"); writeln("主题: " . $bookSubSubTopic->getTopic()); writeln("标题: " . $bookSubSubTopic->getTitle()); writeln(""); writeln("结束测试责任链模式"); function writeln($line_in) { echo $line_in.PHP_EOL; }结果:
开始测试责任链模式 bookTopic设置标题前: 主题: 魔法 标题: 目前没有标题 bookTopic设置标题后: 主题: 魔法 标题: 哈利波特与魔法石 bookSubTopic标题设置前: 主题: 英国魔法 标题: 哈利波特与魔法石 bookSubTopic标题设置后: 主题: 英国魔法 标题: 哈利波特与混血王子 bookSubSubTopic标题设置前: 主题: 英国现代魔法 标题: 哈利波特与混血王子 bookSubSubTopic、 bookSubTopic都没有设置标题: 主题: 英国现代魔法 标题: 哈利波特与魔法石 结束测试责任链模式原文地址:http://sourcemaking.com/design_patterns/chain_of_responsibility/php