PHP設計模式學習筆記: 責任鏈模式(Chain of Responsibility)

jopen 10年前發布 | 23K 次閱讀 PHP設計模式 PHP開發

// 抽象書本類
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; }</pre>結果:

開始測試責任鏈模式

bookTopic設置標題前: 主題: 魔法 標題: 目前沒有標題

bookTopic設置標題后: 主題: 魔法 標題: 哈利波特與魔法石

bookSubTopic標題設置前: 主題: 英國魔法 標題: 哈利波特與魔法石

bookSubTopic標題設置后: 主題: 英國魔法 標題: 哈利波特與混血王子

bookSubSubTopic標題設置前: 主題: 英國現代魔法 標題: 哈利波特與混血王子

bookSubSubTopic、 bookSubTopic都沒有設置標題: 主題: 英國現代魔法 標題: 哈利波特與魔法石

結束測試責任鏈模式</pre>原文地址:http://sourcemaking.com/design_patterns/chain_of_responsibility/php

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!