关于单列模式:
BookSingleton.php
单列模式可以将其本身的实例分配到其他的类中。
//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved class BookSingleton { private $author = 'Gamma, Helm, Johnson, and Vlissides'; private $title = 'Design Patterns'; private static $book = NULL; private static $isLoanedOut = FALSE; private function __construct() { } static function borrowBook() { if (FALSE == self::$isLoanedOut) { if (NULL == self::$book) { self::$book = new BookSingleton(); } self::$isLoanedOut = TRUE; return self::$book; } else { return NULL; } } function returnBook(BookSingleton $bookReturned) { self::$isLoanedOut = FALSE; } function getAuthor() {return $this->author;} function getTitle() {return $this->title;} function getAuthorAndTitle() { return $this->getTitle() . ' by ' . $this->getAuthor(); } }
BookBorrower.php
/copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved include_once('BookSingleton.php'); Class BookBorrower { private $borrowedBook; private $haveBook = FALSE; function __construct() { } function getAuthorAndTitle() { if (TRUE == $this->haveBook) { return $this->borrowedBook->getAuthorAndTitle(); } else { return "I don't have the book"; } } function borrowBook() { $this->borrowedBook = BookSingleton::borrowBook(); if ($this->borrowedBook == NULL) { $this->haveBook = FALSE; } else { $this->haveBook = TRUE; } } function returnBook() { $this->borrowedBook->returnBook($this->borrowedBook); } }
/copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved include_once('BookSingleton.php'); Class BookBorrower { private $borrowedBook; private $haveBook = FALSE; function __construct() { } function getAuthorAndTitle() { if (TRUE == $this->haveBook) { return $this->borrowedBook->getAuthorAndTitle(); } else { return "I don't have the book"; } } function borrowBook() { $this->borrowedBook = BookSingleton::borrowBook(); if ($this->borrowedBook == NULL) { $this->haveBook = FALSE; } else { $this->haveBook = TRUE; } } function returnBook() { $this->borrowedBook->returnBook($this->borrowedBook); } }
testSingleton.php
//copyright Lawrence Truett and FluffyCat.com 2006, all rights reserved include_once('BookSingleton.php'); include_once('BookBorrower.php'); writeln('BEGIN TESTING SINGLETON PATTERN'); writeln(''); $bookBorrower1 = new BookBorrower(); $bookBorrower2 = new BookBorrower(); $bookBorrower1->borrowBook(); writeln('BookBorrower1 asked to borrow the book'); writeln('BookBorrower1 Author and Title: '); writeln($bookBorrower1->getAuthorAndTitle()); writeln(''); $bookBorrower2->borrowBook(); writeln('BookBorrower2 asked to borrow the book'); writeln('BookBorrower2 Author and Title: '); writeln($bookBorrower2->getAuthorAndTitle()); writeln(''); $bookBorrower1->returnBook(); writeln('BookBorrower1 returned the book'); writeln(''); $bookBorrower2->borrowBook(); writeln('BookBorrower2 Author and Title: '); writeln($bookBorrower1->getAuthorAndTitle()); writeln(''); writeln('END TESTING SINGLETON PATTERN'); function writeln($line_in) { echo $line_in.'<'.'BR'.'>'; }
程序输出结果:
BookBorrower1 asked to borrow the book BookBorrower1 Author and Title: Design Patterns by Gamma, Helm, Johnson, and Vlissides BookBorrower2 asked to borrow the book BookBorrower2 Author and Title: I don't have the book BookBorrower1 returned the book BookBorrower2 Author and Title: Design Patterns by Gamma, Helm, Johnson, and Vlissides END TESTING SINGLETON PATTERN
work and travel
Why this web site do not have other languages support?
[Reply]