PHP设计模式学习笔记: 模版方法

jopen 10年前

翻译: 

http://sourcemaking.com/design_patterns/template_method

http://sourcemaking.com/design_patterns/template_method/php

abstract class TemplateAbstract {      public final function showBookTitleInfo($book_in) {          $title = $book_in->getTitle();          $author = $book_in->getAuthor();          $processedTitle = $this->processTitle($title);          $processedAuthor = $this->processAuthor($author);          if (NULL == $processedAuthor) {              $processed_info = $processedTitle;          } else {              $processed_info = $processedTitle.' by '.$processedAuthor;          }          return $processed_info;      }         abstract function processTitle($title);        function processAuthor($author) {          return NULL;      }   }    class TemplateExclaim extends TemplateAbstract {      function processTitle($title) {        return str_replace(' ','!!!',$title);       }        function processAuthor($author) {        return str_replace(' ','!!!',$author);      }  }    class TemplateStars extends TemplateAbstract {      function processTitle($title) {          return str_replace(' ','*',$title);       }  }    class Book {      private $author;      private $title;        function __construct($title_in, $author_in) {          $this->author = $author_in;          $this->title  = $title_in;      }      function getAuthor() {return $this->author;}      function getTitle() {return $this->title;}      function getAuthorAndTitle() {          return $this->getTitle() . ' by ' . $this->getAuthor();      }  }      writeln('开始测试模版方法');echo PHP_EOL;       $book = new Book('PHP for Cats','Larry Truett');       $exclaimTemplate = new TemplateExclaim();      $starsTemplate = new TemplateStars();       writeln('test 1 - show exclaim template');echo PHP_EOL;    writeln($exclaimTemplate->showBookTitleInfo($book));echo PHP_EOL;      writeln('test 2 - show stars template');echo PHP_EOL;    writeln($starsTemplate->showBookTitleInfo($book));echo PHP_EOL;        writeln('END TESTING TEMPLATE PATTERN');      function writeln($line_in) {      echo $line_in;    }
原文地址:http://sourcemaking.com/design_patterns/template_method/php