PHP設計模式學習筆記: 備忘錄模式(Memento)

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

// 閱讀器類
class BookReader {
private $title;
private $page;
function __construct($title_in, $page_in) { $this->setPage($page_in); $this->setTitle($title_in); }
public function getPage() { return $this->page; }
public function setPage($page_in) { $this->page = $page_in; } public function getTitle() { return $this->title; }
public function setTitle($title_in) { $this->title = $title_in; } }

// 備忘閱讀器類的類 class BookMark {
private $title;
private $page;
function __construct(BookReader $bookReader) { $this->setPage($bookReader); $this->setTitle($bookReader);
}
public function getPage(BookReader $bookReader) { $bookReader->setPage($this->page); }
public function setPage(BookReader $bookReader) { $this->page = $bookReader->getPage(); }
public function getTitle(BookReader $bookReader) { $bookReader->setTitle($this->title); }
public function setTitle(BookReader $bookReader) { $this->title = $bookReader->getTitle(); }
}

writeln('開始測試備忘錄模式'); writeln('');

$bookReader = new BookReader('哈利波特與火焰杯','103'); $bookMark = new BookMark($bookReader);

writeln('(最開始的時候) bookReader 的標題是: '.$bookReader->getTitle()); writeln('(最開始的時候) bookReader 的頁碼是: '.$bookReader->getPage());

$bookReader->setPage("104"); $bookMark->setPage($bookReader); writeln('(翻過去一頁后) bookReader 的頁碼是: '.$bookReader->getPage());

$bookReader->setPage('2005'); //oops! a typo 突然翻得太快了 writeln('(打字錯誤,翻得太快了) bookReader 的頁碼是: '.$bookReader->getPage());

print_r($bookMark); / $bookMark仍然存儲著page的原始狀態 BookMark Object ( [title:BookMark:private] => 哈利波特與火焰杯 [page:BookMark:private] => 104 ) /

print_r($bookReader); / $bookReader的頁碼狀態已經改變 BookReader Object ( [title:BookReader:private] => 哈利波特與火焰杯 [page:BookReader:private] => 2005 ) /

// 用備忘錄類來重設頁碼,即用備忘錄類備忘下來的狀態信息重設一個類的狀態值 $bookMark->getPage($bookReader); writeln('(回到翻回去一頁后) bookReader 的頁碼是: '.$bookReader->getPage());
writeln('');

writeln('結束測試備忘錄模式');

function writeln($line_in) { echo $line_in.PHP_EOL; }</pre>結果:

開始測試備忘錄模式

(最開始的時候) bookReader 的標題是: 哈利波特與火焰杯 (最開始的時候) bookReader 的頁碼是: 103 (翻過去一頁后) bookReader 的頁碼是: 104 (打字錯誤,翻得太快了) bookReader 的頁碼是: 2005 (回到翻回去一頁后) bookReader 的頁碼是: 104

結束測試備忘錄模式</pre>

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